当前位置:   article > 正文

架构搭建记录:Spring boot web应用 + 安全框架Shiro:两种方式:shiro-spring、shiro-starter_shiro-spring和shiro stater

shiro-spring和shiro stater

参考资料:
https://shiro.apache.org/
https://www.w3cschool.cn/shiro

本记录中,安全认证采用用户名、密码的认证方式。

第一种:使用shiro-spring包

在pom.xml文件中添加jar依赖:

  1. <dependency>
  2. <groupId>org.apache.shiro</groupId>
  3. <artifactId>shiro-spring</artifactId>
  4. <version>1.6.0</version>
  5. </dependency>

自定义shiro配置:根据需要自定义配置Realm、SecurityManager、Filter

  1. @Configuration
  2. public class MyShiroConfig {
  3. public Realm myRealm() {
  4. AuthorizingRealm realm = new AuthorizingRealm() {
  5. // 认证
  6. @Override
  7. protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
  8. if (null == token.getPrincipal()) {
  9. return null;
  10. }
  11. // 登陆用户名
  12. String userName = token.getPrincipal().toString();
  13. // 根据用户名查询用户(实际业务中,存储用户名、密码的sql)
  14. User user = userDao.getUserByCode(userName);
  15. if (null != user) {
  16. return new SimpleAuthenticationInfo(userName, user.getPassword(), getName());;
  17. } else {
  18. return null;
  19. }
  20. }
  21. @Override
  22. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
  23. // TODO Auto-generated method stub
  24. return null;
  25. }
  26. };
  27. return realm;
  28. }
  29. @Bean
  30. public DefaultWebSessionManager sessionManager() {
  31. DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
  32. // 请求跳转不带参数jsessionid
  33. sessionManager.setSessionIdUrlRewritingEnabled(false);
  34. return sessionManager;
  35. }
  36. //权限管理,配置主要是Realm的管理认证
  37. @Bean
  38. public SecurityManager securityManager() {
  39. DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
  40. securityManager.setRealm(myRealm());
  41. securityManager.setSessionManager(sessionManager());
  42. return securityManager;
  43. }
  44. // Filter工厂,设置过滤条件和跳转条件
  45. @Bean
  46. public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
  47. ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
  48. shiroFilterFactoryBean.setSecurityManager(securityManager);
  49. Map<String, String> map = new HashMap<>();
  50. map.put("/css/**", "anon");
  51. map.put("/js/**", "anon");
  52. map.put("/images/**", "anon");
  53. ......其他资源
  54. //对所有用户认证
  55. map.put("/**", "authc");
  56. //登录
  57. shiroFilterFactoryBean.setLoginUrl("/login");
  58. //首页
  59. shiroFilterFactoryBean.setSuccessUrl("/index");
  60. //错误页面,认证不通过跳转
  61. shiroFilterFactoryBean.setUnauthorizedUrl("/error");
  62. shiroFilterFactoryBean.setFilterChainDefinitionMap(map);
  63. return shiroFilterFactoryBean;
  64. }
  65. }

在登陆的时候,使用UsernamePasswordToken,进行登陆认证

  1. Subject currentUser = SecurityUtils.getSubject();
  2. UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(user.getUserName(), user.getPassword());
  3. currentUser.login(usernamePasswordToken);

第一种:使用shiro-spring-boot-web-starter启动器
在pom.xml文件中添加jar依赖:

  1. <dependency>
  2. <groupId>org.apache.shiro</groupId>
  3. <artifactId>shiro-spring-boot-web-starter</artifactId>
  4. <version>1.7.1</version>
  5. </dependency>

和第一种方式的区别:shiro-starter会自动加载securityManager,不需要再次注入。
只需要注册Realm、Filter即可
@Bean
public Realm myRealm() {
     .......
}
其他关于SecurityManager的代码就不需要了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/507375
推荐阅读
相关标签
  

闽ICP备14008679号