文章目录
- 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或方法进行权限控制时通用的内置表达式。
在控制层中需要权限控制的方法使用
如:
@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;
}