• 18.Shiro与Springboot整合下登陆验证UserService未注入的问题


    Shiro与Springboot整合下登陆验证UserService未注入的问题

    前言:

    刚开始整合的情况下,UserService一执行,就会报空指针异常。

    看了网上各位大神的讲解,什么不能用service层,直接用dao层获取。。。。。。

    然后跟着一路再坑。。。。。。。

    最后的最后,才发现MyRealm类未被加载成bean。

    解决办法:

    package com.xm.zeronews.config;
    
    import java.util.LinkedHashMap;
    import java.util.Map;
    
    import com.xm.zeronews.service.UserService;
    import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
    import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
    import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.apache.shiro.mgt.SecurityManager;
    
    @Configuration
    public class ShiroConfig {
    
        @Autowired
        private UserService userService;
    
        @Bean
        public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) {
            ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
    
            // 必须设置 SecurityManager
            shiroFilterFactoryBean.setSecurityManager(securityManager);
    
            // 如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面
            shiroFilterFactoryBean.setLoginUrl("/login");
    
            // 拦截器.
            Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
            // 配置不会被拦截的链接 顺序判断
            filterChainDefinitionMap.put("/static/**", "anon");
            filterChainDefinitionMap.put("/doLogin", "anon");
            filterChainDefinitionMap.put("/swagger-resources", "anon");
            filterChainDefinitionMap.put("/v2/api-docs", "anon");
            filterChainDefinitionMap.put("/webjars/**", "anon");
            filterChainDefinitionMap.put("/swagger-ui.html", "anon");
    
            // <!-- 过滤链定义,从上向下顺序执行,一般将 /**放在最为下边 -->:这是一个坑呢,一不小心代码就不好使了;
            // <!-- authc:所有url都必须认证通过才可以访问; anon:所有url都都可以匿名访问-->
            filterChainDefinitionMap.put("/**", "anon");
    
            shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
            System.out.println("Shiro拦截器工厂类注入成功");
            return shiroFilterFactoryBean;
        }
    
        /**
         * 注入MyRealm
         * @return
         */
        @Bean
        public SecurityManager securityManager() {
            DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
            // 设置realm.
            securityManager.setRealm(myShiroRealm());
            return securityManager;
        }
    
        /**
         * 配置注解
         * @param securityManager
         * @return
         */
        @Bean
        public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
            AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor
                    = new AuthorizationAttributeSourceAdvisor();
            authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
            return authorizationAttributeSourceAdvisor;
        }
    
        @Bean
        public MyRealm myShiroRealm() {
            return new MyRealm(userService);
        }
    
    }
    

    就是在myShiroRealm()方法上加一个bean注解。一切问题迎刃而解。

  • 相关阅读:
    「分享」DevExpress WPF v22.1最新版本系统环境配置要求
    界面组件Telerik UI for WPF全新的Windows 11主题,一起来探索
    看界面控件DevExpress WinForms——如何自定义辅助功能属性(上)
    使用界面控件DevExpress WPF时,如何安装免费的WinUI组件?
    DevExpress WPF如何在MVVM场景中使用WinUI数据网格?(下)
    「分享」DevExpress WinForms v22.1最新版本系统环境配置要求
    UI组件库Kendo UI for Vue原生组件入门指南 如何配置动画
    界面开发框架DevExtreme React应用程序模板——身份验证界面
    DStream简单操作
    600w+条短租房数据案例分析 ——数据可视化
  • 原文地址:https://www.cnblogs.com/TimerHotel/p/springboot18.html
Copyright © 2020-2023  润新知