我的开源:shiro实现分布式session和url权限验证

阅读: 评论:0

我的开源:shiro实现分布式session和url权限验证

我的开源:shiro实现分布式session和url权限验证

前言

本文讲述了作者基于shiro如何实现分布式session和url权限验证。

代码

shiro,自定义实现分布式session,url权限验证。

实现原理

实现分布式session

默认生成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权限验证

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小时内删除。

标签:分布式   开源   权限   shiro   session
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23