文章目录

  • 1.JSR-250注解
  • 1.1 maven导入依赖
  • 1.2 开启注解
  • 1.3 使用注解
  • 2.@Secured注解
  • 2.1 开启注解
  • 2.2 使用注解
  • 3.SPEL表达式的注解
  • 3.1 开启注解
  • 3.2 使用注解


在服务器端我们可以通过Spring security提供的注解对方法来进行权限控制。Spring Security在方法的权限控制上支持三种类型的注解,JSR-250注解、@Secured注解和支持表达式的注解,这三种注解默认都是没有启用的,需要单独通过global-method-security元素的对应属性进行启用

1.JSR-250注解

1.1 maven导入依赖

<dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>jsr250-api</artifactId>
            <version>1.0</version>
        </dependency>

1.2 开启注解

在spring_security.xml中

<security:global-method-security jsr250-annotations="enabled"/>

1.3 使用注解

@RolesAllowed表示访问对应方法时所应该具有的角色示例:
@RolesAllowed({“USER”, “ADMIN”}) 该方法只要具有"USER", "ADMIN"任意一种权限就可以访问。这里可以省略前缀ROLE_,实际的权限可能是ROLE_ADMIN
@PermitAll表示允许所有的角色进行访问,也就是说不进行权限控制
@DenyAll是和PermitAll相反的,表示无论什么角色都不能访问

在控制层中需要权限控制的方法使用
如:

@RequestMapping("/findAll.do")
    @RolesAllowed("ADMIN")
    public ModelAndView findAll(){
        ModelAndView mv = new ModelAndView();
        List<Product> list = service.findAll();
        /*list.forEach(System.out::println);*/
        mv.addObject("productList",list);
        mv.setViewName("product-list");
        return mv;
    }

2.@Secured注解

2.1 开启注解

在spring_security.xml中

<security:global-method-security secured-annotations="enabled"/>

2.2 使用注解

这里可以不可以省略前缀ROLE_,需要写实际的权限ROLE_ADMIN
实际权限为spring-security.xml配置的不是数据库中的

如:即为实际的权限

<!-- 配置具体的拦截的规则 pattern="请求路径的规则"
        access="访问系统的人,必须有ROLE_USER或ROLE_ADMIN的角色" -->
        <security:intercept-url pattern="/**" access="ROLE_USER,ROLE_ADMIN"/>

在控制层中需要权限控制的方法使用
如:

@RequestMapping("/findAll.do")
    @Secured("ROLE_ADMIN")
    public ModelAndView findAll(){
        ModelAndView mv = new ModelAndView();
        List<Product> list = service.findAll();
        /*list.forEach(System.out::println);*/
        mv.addObject("productList",list);
        mv.setViewName("product-list");
        return mv;
    }

3.SPEL表达式的注解

3.1 开启注解

在spring_security.xml中

<security:global-method-security pre-post-annotations="enabled"/>

3.2 使用注解

相关

Spring Security允许我们在定义URL访问或方法访问所应有的权限时使用Spring EL表达式,在定义所需的访问权限时如果对应的表达式返回结果为true则表示拥有对应的权限,反之则无。Spring Security可用表达式对象的基类是SecurityExpressionRoot,其为我们提供了如下在使用Spring EL表达式对URL或方法进行权限控制时通用的内置表达式。

springboot添加权限注解 springsecurity注解权限控制_List

在控制层中需要权限控制的方法使用
如:

@RequestMapping("/findAll.do")
    @PreAuthorize("hasRole('ROLE_ADMIN')")
    public ModelAndView findAll(){
        ModelAndView mv = new ModelAndView();
        List<Product> list = service.findAll();
        /*list.forEach(System.out::println);*/
        mv.addObject("productList",list);
        mv.setViewName("product-list");
        return mv;
    }