zoukankan      html  css  js  c++  java
  • 使用shiro时,如果正常登陆(执行subject.login(token)成功)就能在全局通过SecurityUtils.getSubject().getPrincipal()获取用户信息。

    使用shiro时,如果正常登陆(执行subject.login(token)成功)就能在全局通过SecurityUtils.getSubject().getPrincipal()获取用户信息。

    之前的项目是OK的,新项目中突然出问题。现在给出我自己问题的解决方案。
    shiro的配置中有个use-prefix选项,其配置有两点需要注意:

        要在配置文件的最上边(或者相关属性的最前边);
        一定要先于其它相关配置生效。

    我原先的配置文件中的部分内容如下:

    @Configuration
    public class ShiroConfig {

        @Autowired
        private ManagerAccessControlFilter managerAccessControlFilter;

        @Bean
        public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {
            return new LifecycleBeanPostProcessor();
        }

        @Bean
        public static DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator(){
            DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator=new DefaultAdvisorAutoProxyCreator();
            defaultAdvisorAutoProxyCreator.setUsePrefix(true);
            return defaultAdvisorAutoProxyCreator;
        }

     

    我的filter是通过spring注解引用的,而且配置是在setUsePrefix前(这个时候这个倒是其次,即使放前边也是不生效的)。
    如果使用spring的注解,在进入配置文件前肯定是优先被加载的。所以将其更改如下:

    @Bean
        public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {
            return new LifecycleBeanPostProcessor();
        }

        @Bean
        public static DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator(){
            DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator=new DefaultAdvisorAutoProxyCreator();
            defaultAdvisorAutoProxyCreator.setUsePrefix(true);
            return defaultAdvisorAutoProxyCreator;
        }

        /**
         * ShiroFilterFactoryBean 处理拦截资源文件问题。
         * 注意:单独一个ShiroFilterFactoryBean配置是或报错的,因为在
         * 初始化ShiroFilterFactoryBean的时候需要注入:SecurityManager
         *
         Filter Chain定义说明
         1、一个URL可以配置多个Filter,使用逗号分隔
         2、当设置多个过滤器时,全部验证通过,才视为通过
         3、部分过滤器可指定参数,如perms,roles
         *
         */
        @Bean
        public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager){
            ShiroFilterFactoryBean shiroFilterFactoryBean  = new ShiroFilterFactoryBean();

            // 必须设置 SecurityManager
            shiroFilterFactoryBean.setSecurityManager(securityManager);

            ManagerAccessControlFilter managerAccessControlFilter = new ManagerAccessControlFilter();

            //自定义拦截器
            Map<String, Filter> filtersMap = new LinkedHashMap<>();
            filtersMap.put("managerAccessControlFilter", managerAccessControlFilter);
            shiroFilterFactoryBean.setFilters(filtersMap);

            //拦截器
            Map<String,String> filterChainDefinitionMap = new LinkedHashMap<>();

            filterChainDefinitionMap.put("/ping", "anon");

            shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
            return shiroFilterFactoryBean;
        }

  • 相关阅读:
    IsDefined的问题
    设计匠艺模型
    真实案例引起的对系统健壮性的思考
    软件系统的稳定性
    LA工作第二周体会
    LA工作第一周体会
    https://blog.csdn.net/qq_26264237/article/details/90575165
    Maven项目配置logback
    Java 工具 Hutool4.0.0 正式发布:从懵懂到成熟
    IDEAidea中解决Java程序包不存在问题
  • 原文地址:https://www.cnblogs.com/lykbk/p/14892481.html
Copyright © 2011-2022 走看看