ShiroConfiguration.java 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package net.mingsoft.config;
  2. import java.util.LinkedHashMap;
  3. import java.util.Map;
  4. import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
  5. import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
  6. import org.springframework.beans.factory.annotation.Value;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9. import net.mingsoft.basic.security.BaseAuthRealm;
  10. import org.apache.shiro.mgt.SecurityManager;
  11. @Configuration
  12. public class ShiroConfiguration {
  13. @Value("${ms.manager.path}")
  14. private String managerPath;
  15. @Bean
  16. public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) {
  17. ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
  18. // 必须设置 SecurityManager
  19. shiroFilterFactoryBean.setSecurityManager(securityManager);
  20. // setLoginUrl 如果不设置值,默认会自动寻找Web工程根目录下的"/login.jsp"页面 或 "/login" 映射
  21. shiroFilterFactoryBean.setLoginUrl(managerPath+"/login.do");
  22. // 设置无权限时跳转的 url;
  23. shiroFilterFactoryBean.setUnauthorizedUrl(managerPath+"/404.do");
  24. // 设置拦截器
  25. Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
  26. // 游客,开发权限
  27. filterChainDefinitionMap.put("/static/**", "anon");
  28. filterChainDefinitionMap.put("/html/**", "anon");
  29. // 开放登陆接口
  30. filterChainDefinitionMap.put(managerPath+"/login.do", "anon");
  31. filterChainDefinitionMap.put(managerPath+"/checkLogin.do", "anon");
  32. // 其余接口一律拦截
  33. // 主要这行代码必须放在所有权限设置的最后,不然会导致所有 url 都被拦截
  34. filterChainDefinitionMap.put(managerPath+"/**", "authc");
  35. shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
  36. return shiroFilterFactoryBean;
  37. }
  38. /**
  39. * 注入 securityManager
  40. */
  41. @Bean
  42. public SecurityManager securityManager() {
  43. DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
  44. // 设置realm.
  45. securityManager.setRealm(customRealm());
  46. return securityManager;
  47. }
  48. /**
  49. * 自定义身份认证 realm;
  50. * <p>
  51. * 必须写这个类,并加上 @Bean 注解,目的是注入 CustomRealm, 否则会影响 CustomRealm类 中其他类的依赖注入
  52. */
  53. @Bean
  54. public BaseAuthRealm customRealm() {
  55. return new BaseAuthRealm();
  56. }
  57. }