SpringSecurity权限控制实现原理解析
作者:天宇轩-王 时间:2022-04-05 14:46:27
菜单控制:
可以用来判断这个用户是不是有这些角色,没有的话就不展示
数据控制:
由于数据都是从后端查的,在后端控制权限就可以了
<!--
开启权限控制注解支持
jsr250-annotations="enabled"表示支持jsr250-api的注解,需要jsr250-api的jar包
pre-post-annotations="enabled"表示支持spring表达式注解
secured-annotations="enabled"这才是SpringSecurity提供的注解
-->
<security:global-method-security jsr250-annotations="enabled"
pre-post-annotations="enabled"
secured-annotations="enabled"/>
注:这个要放在mvc的容器中,因为子容器可以访问到主容器,主容器访问不到子容器
/表示当前类中所有方法都需要ROLE_ADMIN或者ROLE_PRODUCT才能访问
@Controller
@RequestMapping("/product")
@RolesAllowed({"ROLE_ADMIN","ROLE_PRODUCT"})//JSR-250注解
public class ProductController {
@RequestMapping("/findAll")
public String findAll(){
return "product-list";
}
}
//表示当前类中findAll方法需要ROLE_ADMIN或者ROLE_PRODUCT才能访问
@Controller
@RequestMapping("/product")
public class ProductController {
@RequestMapping("/findAll")
@PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_PRODUCT')")//spring表达式注解
public String findAll(){
return "product-list";
}
}
//表示当前类中所有方法都需要ROLE_ADMIN或者ROLE_PRODUCT才能访问
@Controller
@RequestMapping("/product")
@Secured({"ROLE_ADMIN","ROLE_PRODUCT"})//SpringSecurity注解
public class ProductController {
@RequestMapping("/findAll")
public String findAll(){
return "product-list";
}
}
但是会报403无法访问
方式一:在 spring-security.xml配置文件中处理
<!--设置可以用spring的el表达式配置Spring Security并自动生成对应配置组件(过滤器)-->
<security:http auto-config="true" use-expressions="true">
<!--省略其它配置-->
<!--403异常处理-->
<security:access-denied-handler error-page="/403.jsp"/>
</security:http>
方式二:在 web.xml中处理
<error-page>
<error-code>403</error-code>
<location>/403.jsp</location>
</error-page>
方式三:编写异常处理器
/**
* @author WGR
* @create 2020/3/2 -- 17:33
*/
@ControllerAdvice
public class ControllerExceptionAdvice {
//只有出现AccessDeniedException异常才调转403.jsp页面
@ExceptionHandler(AccessDeniedException.class)
public String exceptionAdvice(){
System.out.println("1234");
return "forward:/403.jsp";
}
}
注:如果是spring项目,也要把这个扫描进去。
来源:https://www.cnblogs.com/dalianpai/p/12397416.html
标签:Spring,Security,权限,控制
0
投稿
猜你喜欢
设计模式在Spring框架中的应用汇总
2023-10-22 19:20:09
java反射拼接方法名动态执行方法实例
2022-12-07 00:44:28
浅谈Android开发中项目的文件结构及规范化部署建议
2022-05-13 12:47:37
jdbc中class.forname的作用
2023-04-13 00:56:18
Android usb设备权限查询及自动获取详解流程
2022-01-12 08:40:39
Java实现的微信公众号获取微信用户信息示例
2022-04-25 15:15:29
Springboot项目全局异常统一处理案例代码
2021-08-26 10:51:19
springcloud LogBack日志使用详解
2021-12-23 15:17:05
如何用Java Stream写出既高雅又装*的代码
2022-04-13 23:23:58
SpringBoot配置SSL同时支持http和https访问实现
2023-04-25 19:42:45
java门禁系统面向对象程序设计
2023-08-25 02:25:53
C++实现俄罗斯方块源码
2023-06-27 23:49:14
Java简单实现约瑟夫环算法示例
2023-04-04 09:59:41
java实现微信H5支付方法详解
2021-10-15 06:10:30
使用springboot跳转到指定页面和(重定向,请求转发的实例)
2021-10-21 11:09:24
在springboot中对kafka进行读写的示例代码
2023-11-26 00:48:02
Java深入了解数据结构之栈与队列的详解
2022-03-24 08:12:27
mybatis-plus 使用Condition拼接Sql语句各方法的用法
2022-07-06 03:51:12
C# null 合并运算符??(双问号)使用示例
2022-12-03 02:29:19
map实现按value升序排序
2022-10-23 23:13:49