• 【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>
    

    以此备注。

  • 相关阅读:
    用GDB调试程序(一)
    ZOJ Problem Set
    android 去除标题
    【hadoop之翊】——基于CentOS的hadoop2.4.0伪分布安装配置
    layoutSubviews总结
    用数据说话,外贸产品选择(中篇)-google趋势分析法
    Apache介绍
    浅谈android4.0开发之GridLayout布局
    Android GridView 分页加载数据
    Android TableLayout中的使用说明
  • 原文地址:https://www.cnblogs.com/zengweiming/p/7649211.html
Copyright © 2020-2023  润新知