shiro的登录账号密码校验过程,SimpleAuthenticationInfo的参数定义
SimpleAuthenticationInfo的参数解释:
第一个参数:可以传username登录名,也可传user对象,后面SecurityUtils.getSubject().getPrincipal();这个方法会把这个值取出来。需要取用户名还是整个用户对象,你这个参数传什么那里就取什么。
第二个参数:传密码,可以是加密前也可以是加密后的密码。如果传加密前的密码,那你需要在SimpleAuthenticationInfo上面写一个自己密码验证的方法;如果你传加密后的密码,那你在UsernamePasswordToken那里就需要传加密后的密码;因为最终是比较UsernamePasswordToken传的密码和SimpleAuthenticationInfo传的密码;
第三个参数:是盐,一般可以不写;
第四个参数:getName()就好,也可以填空;
下面给一个传加密后的密码做比较例子。(传加密后的密码是SimpleAuthenticationInfo自己去比较,不用手动自己比较密码)
LoginController的方法
@PostMapping("/login") @ResponseBody public AjaxResult ajaxLogin(@RequestBody HashMapmap) { if (StringUtils.isEmpty(map.get("username")) || StringUtils.isEmpty(map.get("password"))){ return error("用户或密码不能为空"); } Subject subject = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken(map.get("username"), ShiroUtils.encryptPassword(map.get("username"), map.get("password")), false); try { subject.login(token); return success(ShiroUtils.getSysUser()); } catch (AuthenticationException e) { String msg = "密码错误"; if (StringUtils.isNotEmpty(e.getMessage())){ if(e.getMessage().contains("did not match the expected credentials.")) { return error(msg); } msg = e.getMessage(); } return error(msg); } }
UserRealm的认证方法
/** * 登录认证 */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { UsernamePasswordToken upToken = (UsernamePasswordToken) token; String username = upToken.getUsername(); Map user = userMapper.selectByUsername(username); if(user==null) { throw new AuthenticationException("用户不存在"); } String db_password=user.get("US_PASSWORD").toString(); user.remove("US_PASSWORD"); SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, db_password, getName()); return info; }
正在加载评论...
相关文章
- 配置@ConfigurationProperties后读取yml文件的参数...
- Caused by: java.lang.NoClassDefFoundError: Coul...
- springboot加入SSL证书设置https访问
- Springboot用pagehelper分页插件查询Oracle的速度...
- shiro的登录账号密码校验过程,SimpleAuthenticati...
- Shiro控制没有登录时,返回指定JSON格式数据
- SpringBoot中mybatis返回的Date时间格式化
- ClassNotFoundException: org.aspectj.lang.annota...
- org.apache.shiro.UnavailableSecurityManagerExce...
栏目列表
推荐阅读
- java的StringEscapeUtils转义与反转义
- Mybatis的foreach事列,如何获取foreach的index值
- Java Ehcache缓存的timeToIdleSeconds和timeToLiveSeconds区别
- errcode: 40001, errmsg: invalid credential, access_token is invalid or not latest rid: 5f6981c2-6cc9cb20-6833977a
- 服务器侦听端口 netstat -na 命令详解
- Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor
- tomcat启动maven工程报错-Updating status for Tomcat v7.0 Server at localhost...
- Mybatis异常There is no getter for property named 'XXX' in 'class java.lang.String'
- Java后台获取当前访问客户端的真实IP地址(外网或内网地址)
- com.googlecode.aviator.AviatorEvaluator规则引擎用法
- java发送http的get、post请求
- StringSubstitutor替换占位符,处理SQL参数
- java拦截器HandlerInterceptor的preHandle、postHandle与afterCompletion三个方法
- java中Session缓存和Cache缓存的区别
- Java8对象集合转List<Integer>id集合,转List<String>name集合,List<Class>对象集合
- Java导出excel利用jxls合并单元格jx:mergeCells实现表格嵌套技术
- 利用ObjectMapper,将json数组转List<Map<String,Object>>
- java图片文件base64流之间的互转帮助类源码下载
- java的DES加密解密辅助类
- Java Ecache缓存工具类源码下载