#spring-boot #shiro
#пружинный ботинок #широ
Вопрос:
Перехват авторизации в Apache Shiro с интеграцией Spring Boot не работает
@Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { User user = (User) SecurityUtils.getSubject().getPrincipal(); logger.info(user.getUsername() "----------------------------" user.getRoles()); if (user != null) { SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); info.addStringPermission(user.getPerms()); return info; } return null; }
это контроллер
@Controller @RequestMapping("/admin") public class LoginController { @Autowired private UserService userService; @GetMapping({"","/login"}) public String loginPage(){ return "admin/login"; } @PostMapping("/login") public String login(@RequestParam String username, @RequestParam String password) throws Exception { Subject subject = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken(username,password); try { subject.login(token); return "admin/index"; } catch (IncorrectCredentialsException ice) { throw new MyException(ResultCode.INCORRECTCREDENTAILERROR); } catch (UnknownAccountException uae) { throw new MyException(ResultCode.UNKONWNACCOUNTERROR); } catch (AuthenticationException ae) { throw new MyException(ResultCode.USERNAMEPASSWORDERROR); } } @RequestMapping("/index") public String adminIndex(){ return "admin/index"; } }
вот перехват, где "/admin/**"
, "perms[admin:manage]"
не работает, но замените его на "/admin/index"
, "perms[admin:manage]"
и он работает.
@Bean(name = "shiroFilter") public ShiroFilterFactoryBean shiroFilter(@Qualifier("securityManager") DefaultWebSecurityManager securityManager){ ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean(); bean.setSecurityManager(securityManager); bean.setLoginUrl("/admin/login"); bean.setUnauthorizedUrl("/"); Maplt;String,Stringgt; filterChainDefinitionMap = new LinkedHashMaplt;gt;(); filterChainDefinitionMap.put("/css/**", "anon"); filterChainDefinitionMap.put("/images/**", "anon"); filterChainDefinitionMap.put("/js/**", "anon"); filterChainDefinitionMap.put("/lib/**", "anon"); filterChainDefinitionMap.put("/", "anon"); filterChainDefinitionMap.put("/admin", "anon"); //problem here filterChainDefinitionMap.put("/admin/**", "perms[admin:manage]"); filterChainDefinitionMap.put("/admin/**", "authc"); filterChainDefinitionMap.put("/**", "anon"); bean.setFilterChainDefinitionMap(filterChainDefinitionMap); return bean; }