当前位置 : 主页 > 编程语言 > java >

解决shiro 的@configuration注解配置文件里服务service注入不成功问题

来源:互联网 收集:自由互联 发布时间:2021-06-28
在这个shirofilter的bean里需要调取服务,但是注入服务不成功,如下调取服务成功解决 /** * ShiroFilterFactoryBean,是个factorybean,为了生成ShiroFilter。 * 它主要保持了三项数据,securityManager,
在这个shirofilter的bean里需要调取服务,但是注入服务不成功,如下调取服务成功解决
/**
     * ShiroFilterFactoryBean,是个factorybean,为了生成ShiroFilter。
     * 它主要保持了三项数据,securityManager,filters,filterChainDefinitionManager。
     */
    @Bean(name = "shiroFilter")
    public ShiroFilterFactoryBean shiroFilterFactoryBean() {
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        // 必须设置 SecurityManager
        shiroFilterFactoryBean.setSecurityManager(securityManager());
        //如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面
        shiroFilterFactoryBean.setLoginUrl("/user/login");
        // 未授权界面;
        shiroFilterFactoryBean.setUnauthorizedUrl("/user/403");
        Map
 
   filters = new LinkedHashMap<>();
        LogoutFilter logoutFilter = new LogoutFilter();
        logoutFilter.setRedirectUrl("/user/login");
        //filters.put("perms", urlPermissionsFilter());
        shiroFilterFactoryBean.setFilters(filters);
        Map
  
    filterChainDefinitionManager = new LinkedHashMap
   
    (); // 配置退出过滤器,其中的具体的退出代码Shiro已经替我们实现了 filterChainDefinitionManager.put("/user/logout", "logout"); filterChainDefinitionManager.put("/user/login", "anon");//anon 可以理解为不拦截 filterChainDefinitionManager.put("/user/toLogin", "anon");//anon 可以理解为不拦截 filterChainDefinitionManager.put("/user/403", "anon");//anon 可以理解为不拦截 List
    
      resourcesList=sysUserService().getAuthorities(); for(SysAuthority resources:resourcesList){ if (StringUtils.isNotEmpty(resources.getPath())) { String permission = "perms[" + resources.getPath()+ "]"; filterChainDefinitionManager.put(resources.getPath(),permission); } } filterChainDefinitionManager.put("/**", "authc");//拦截 shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionManager); return shiroFilterFactoryBean; }
    
   
  
 
在本配置文件里声明一个service的bean,上面代码调取sysUserService()
@Bean
    public SysUserService sysUserService() {
    	return new SysUserService();
    }
网友评论