• 【Shiro】调用doGetAuthenticationInfo进行认证成功之后,isAuthenticated是false的问题。


    原文链接:https://tidyko.com/posts/b014d2be.html

    使用@Configuration配置shiro无状态登录时出现的问题,在subject.login之后当前线程重新绑定了一个假定subject,isAuthenticated。

    这里自定义的访问拦截器的创建需要放在shiroFilter之后,如下:

     /**
      * Shiro 的 Web 过滤器链
      */
    @Bean("shiroFilter")
    public ShiroFilterFactoryBean shiroFilter() {
        ShiroFilterFactoryBean filter = new ShiroFilterFactoryBean();
        filter.setSecurityManager(securityManager());
    
        Map<String, Filter> filters = new LinkedHashMap<String, Filter>();
        // 无状态授权器
        filters.put("statelessAuthc", statelessAuthcFilter());
        filter.setFilters(filters);
    
        /**
         * 配置shiro拦截器链
         */
        // filterChainDefinitionMap 必须是 LinkedHashMap 因为它必须保证有序
        Map<String, String> chain = new LinkedHashMap<String, String>();
        // anon-表示可以匿名访问, authc-表示需要认证才可以访问
        // 因为禁用了 Session,所以这里不能使用 authc 了,否则会报 DisabledSessionException 异常
        chain.put("/services/*", "statelessAuthc");
        chain.put("/**", "anon");
        filter.setFilterChainDefinitionMap(chain);
        return filter;
    }
        
    // 访问控制过滤器
    // <bean id="authcFilter" class="cn.tisson.upms.client.shiro.filter.StatelessAccessControlFilter"/>
    
    @Bean
    public AccessControlFilter statelessAuthcFilter() {
        return new StatelessAccessControlFilter();
    }
    

      

    如果使用xml配置是不需要注意前后位置的

    <bean id="statelessAuthcFilter" class="cn.tisson.upms.client.shiro.filter.UpmsStatelessAuthcFilter"/>
    
    <!-- Shiro的Web过滤器 -->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager"/>
        <property name="filters">
            <util:map>
                <entry key="statelessAuthc" value-ref="statelessAuthcFilter"/>
            </util:map>
        </property>
        <property name="filterChainDefinitions">
            <value>
                /services/*=statelessAuthc
                /**=anon
            </value>
        </property>
    </bean>
    

    以此备注。

  • 相关阅读:
    js 检测浏览器
    js获取url参数
    js 使用Math函数取得数组最大最少值
    js 取一定范围内的整数
    遍历文件夹内所有文件
    'weinre' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 解决方案
    解决图片缓存导致页面刷新无效果问题
    JAVA中的几种基本数据类型是什么,各自占用多少字节
    Mac终端git,svn提交代码步骤
    小程序分享链接功能
  • 原文地址:https://www.cnblogs.com/zengweiming/p/7649211.html
Copyright © 2020-2023  润新知