shiro的登录账号密码校验过程,SimpleAuthenticationInfo的参数定义
SimpleAuthenticationInfo的参数解释:
第一个参数:可以传username登录名,也可传user对象,后面SecurityUtils.getSubject().getPrincipal();这个方法会把这个值取出来。需要取用户名还是整个用户对象,你这个参数传什么那里就取什么。
第二个参数:传密码,可以是加密前也可以是加密后的密码。如果传加密前的密码,那你需要在SimpleAuthenticationInfo上面写一个自己密码验证的方法;如果你传加密后的密码,那你在UsernamePasswordToken那里就需要传加密后的密码;因为最终是比较UsernamePasswordToken传的密码和SimpleAuthenticationInfo传的密码;
第三个参数:是盐,一般可以不写;
第四个参数:getName()就好,也可以填空;
下面给一个传加密后的密码做比较例子。(传加密后的密码是SimpleAuthenticationInfo自己去比较,不用手动自己比较密码)
LoginController的方法
@PostMapping("/login")
@ResponseBody
public AjaxResult ajaxLogin(@RequestBody HashMap map)
{
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;
}
正在加载评论...
相关文章
- 新建的springboot项目接口返回乱码的解决方法
- 配置@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...
栏目列表
推荐阅读
- 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
- Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor
- 服务器侦听端口 netstat -na 命令详解
- 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缓存的区别
- Java导出excel利用jxls合并单元格jx:mergeCells实现表格嵌套技术
- Java8对象集合转List<Integer>id集合,转List<String>name集合,List<Class>对象集合
- java图片文件base64流之间的互转帮助类源码下载
- 利用ObjectMapper,将json数组转List<Map<String,Object>>
- java的DES加密解密辅助类
- Java Ecache缓存工具类源码下载