zoukankan      html  css  js  c++  java
  • SpringBoot简单集成Shiro登录验证

    先导入pom.xml的依赖

    <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-spring</artifactId>
                <version>1.4.1</version>
            </dependency>
    <!--配置日志文件-->
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    </dependency>
    <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
    </dependency>

    第二步,Shiro框架怎么用,直接配置相关信息即可,这里要注意,我们从下往上走,理解会更加的简单

     1 @Configuration
     2 public class ShiroConfig {
     3 
     4     //shiroFilterFactoryBean
     5     @Bean                                                      //此处Qualifier绑定的是getDefaultSecurityManager这个bean对象
     6     public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager defaultWebSecurityManager){
     7         //前两步固定套路,工厂模式创建一个shiroFilterFactoryBean,然后将下面的defaultWebSecurityManager设置进来
     8         ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
     9         bean.setSecurityManager(defaultWebSecurityManager);
    10 
    11         // <!-- authc:所有url都必须认证通过才可以访问; anon:所有url都都可以匿名访问-->
    12 //        Map<String, String> filterMap = new LinkedHashMap<>();
    13 //        //注意此处的页面路劲不是网页名称,而是MVC中的方法
    14 //        filterMap.put("/main","anon");
    15 //        bean.setFilterChainDefinitionMap(filterMap);
    16 
    17         //设置登录时路径
    18 //        bean.setLoginUrl("/index");
    19         return bean;
    20     }
    21 
    22     //DefaultWebSecurityManager,中间商,处理用户 授权 以及 认证 的合法性,以此转交给上面的FilterFactorBean进行过滤
    23     @Bean(name = "securityManager")                             //此处Qualifier绑定的是userRealm这个bean对象
    24     public DefaultWebSecurityManager getDefaultSecurityManager(@Qualifier("userRealm") UserRealm userRealm){
    25         DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
    26 
    27         //关联Realm
    28         defaultWebSecurityManager.setRealm(userRealm);
    29 
    30         return defaultWebSecurityManager;
    31     }
    32 
    33     //创建Realm对象,用来进行授权以及认证功能,完毕后转交给SecurityManager进行合法性验证
    34     @Bean
    35     public UserRealm userRealm(){
    36         return new UserRealm();
    37     }
    38 }

    然后我们来配置UserRealm的登录验证逻辑

     1 public class UserRealm extends AuthorizingRealm {
     2 
     3 
     4     @Autowired
     5     UserMapper userMapper;
     6 
     7     //授权
     8     @Override
     9     protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
    10         System.out.println("执行了授权");
    11         return null;
    12     }
    13 
    14     //认证
    15     @Override
    16     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
    17         System.out.println("执行了认证");
    18 
    19         //获取当前用户token
    20         UsernamePasswordToken userToken = (UsernamePasswordToken) token;
    21 
    22         //mybatis-plus查询
    23         QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    24         queryWrapper.eq("username",userToken.getUsername());
    25         User user = userMapper.selectOne(queryWrapper);
    26 
    27         //后台测试打印用户是否正确获取
    28         System.out.println(user.getUsername()+" "+user.getPassword());
    29 
    30         //如果用户不存在
    31         if(user.getUsername() == null)
    32             return null; //自动抛出UnknownAccountException
    33      
    34         System.out.println(userToken.getUsername()+"......");
    35 
    36         //password siro处理 不交由用户处理
    37         return new SimpleAuthenticationInfo("",user.getPassword(),"");
    38     }
    39 }

    最后,新建一个log4j.properties配置一下日志文件即可

     1 log4j.rootLogger=INFO, stdout
     2 
     3 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
     4 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
     5 log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m %n
     6 
     7 # General Apache libraries
     8 log4j.logger.org.apache=WARN
     9 
    10 # Spring
    11 log4j.logger.org.springframework=WARN
    12 
    13 # Default Shiro logging
    14 log4j.logger.org.apache.shiro=INFO
    15 
    16 # Disable verbose logging
    17 log4j.logger.org.apache.shiro.util.ThreadContext=WARN
    18 log4j.logger.org.apache.shiro.cache.ehcache.EhCache=WARN

    至此,登录验证用户名密码功能已经实现了。

  • 相关阅读:
    解决取消input标签中disabled属性
    【转】jQuery源码分析-13 CSS操作-CSS-类样式-addClass+removeClass+toggleClass+hasClass
    Bigpipe学习【转】
    用户请求的生命周期[传统模式与BigPipe]
    gcc扩展语法一:在表达式中的语句和声明
    分享一个关于pthread线程栈在mm_struct里面的分布问题
    neo4j 安装步骤 转自:http://blog.csdn.net/luoluowushengmimi/article/details/19987995
    sudoers文件解析 转自:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1971013
    匿名union
    VMware虚拟机修改BIOS启动项
  • 原文地址:https://www.cnblogs.com/keke26/p/12841961.html
Copyright © 2011-2022 走看看