本文讲述了作者基于shiro如何实现分布式session和url权限验证。
shiro,自定义实现分布式session,url权限验证。
默认生成ServletContainerSessionManager bean,其内部使用httpsession,与sessionDao无关。由于需要通过sessionDao实现分布式session,所以不能使用该sessionManager。
// org.apache.shiro.fig.AbstractShiroWebConfiguration#sessionManager protected SessionManager sessionManager() {if (useNativeSessionManager) {return nativeSessionManager();}return new ServletContainerSessionManager();}
shiro针对web场景,提供了一个默认sessionManager,其内部会使用到sessionDao。
org.apache.shiro.DefaultWebSessionManager
@Beanprotected SessionManager sessionManager(SessionDAO sessionDAO) {DefaultWebSessionManager defaultWebSessionManager = new DefaultWebSessionManager();defaultWebSessionManager.setSessionDAO(sessionDAO);return defaultWebSessionManager;}
选择好sessionManager之后,需要自定义实现sessionDao了,在其中提供分布式session解决方案。
fig.session.CustomSessionDao
url代表了一个操作,可作为功能权限。shiro本身没有提供支持,所以需要自行实现。由于shiro是基于filter实现的,所以我也采用filter。
另一方面,shiro以subject为中心,所以身份认证或授权验证都是直接调用subjectAPI。
// fig.filter.UrlPermAccessControlFilter@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,FilterChain filterChain) throws ServletException, IOException {Subject subject = Subject();String requestURI = RequestURI();boolean permitted = subject.isPermitted(requestURI);if (!permitted) {response.sendRedirect("/unauthorized.html");return;}filterChain.doFilter(request, response);}
至此,分布式session和url权限验证已经可以满足要求。其中重点在于sessionDao和subject的使用。
你还可以查看
安全框架shiro的基础知识_陈海龙的格物之路-CSDN博客通过阅读这篇文章,你可以了解到shiro是什么、shiro的架构、shiro如何支持web环境的安全验证等。
安全框架对比:shiro vs spring-security_陈海龙的格物之路-CSDN博客shiro和spring-security都是安全框架,两者有哪些相同点和差异呢?
本文发布于:2024-01-29 03:11:33,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170646909612278.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |