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

前言

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

代码

shiro,自定义实现分布式session,url权限验证。https://github.com/chlInGithub/shirodemo

实现原理

实现分布式session

默认生成ServletContainerSessionManager bean,其内部使用httpsession,与sessionDao无关。由于需要通过sessionDao实现分布式session,所以不能使用该sessionManager。

// org.apache.shiro.spring.web.config.AbstractShiroWebConfiguration#sessionManager    
    protected SessionManager sessionManager() {
        if (useNativeSessionManager) {
            return nativeSessionManager();
        }
        return new ServletContainerSessionManager();
    }

shiro针对web场景,提供了一个默认sessionManager,其内部会使用到sessionDao。

org.apache.shiro.web.session.mgt.DefaultWebSessionManager
    @Bean
    protected SessionManager sessionManager(SessionDAO sessionDAO) {
        DefaultWebSessionManager defaultWebSessionManager = new DefaultWebSessionManager();
        defaultWebSessionManager.setSessionDAO(sessionDAO);
        return defaultWebSessionManager;
    }

选择好sessionManager之后,需要自定义实现sessionDao了,在其中提供分布式session解决方案。

com.example.demo.config.session.CustomSessionDao

实现url权限验证

url代表了一个操作,可作为功能权限。shiro本身没有提供支持,所以需要自行实现。由于shiro是基于filter实现的,所以我也采用filter。

另一方面,shiro以subject为中心,所以身份认证或授权验证都是直接调用subjectAPI。

// com.example.demo.config.filter.UrlPermAccessControlFilter
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
            FilterChain filterChain) throws ServletException, IOException {
        Subject subject = SecurityUtils.getSubject();
        String requestURI = request.getRequestURI();
        boolean permitted = subject.isPermitted(requestURI);
        if (!permitted) {
            response.sendRedirect("/unauthorized.html");
            return;
        }

        filterChain.doFilter(request, response);
    }

至此,分布式session和url权限验证已经可以满足要求。其中重点在于sessionDao和subject的使用。

你还可以查看

安全框架shiro的基础知识_陈海龙的格物之路-优快云博客通过阅读这篇文章,你可以了解到shiro是什么、shiro的架构、shiro如何支持web环境的安全验证等。https://blog.youkuaiyun.com/chl87783255/article/details/120434130

安全框架对比:shiro vs spring-security_陈海龙的格物之路-优快云博客shiro和spring-security都是安全框架,两者有哪些相同点和差异呢?https://blog.youkuaiyun.com/chl87783255/article/details/120436997

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值