我是靠谱客的博主 昏睡太阳,最近开发中收集的这篇文章主要介绍Shiro学习:如何在Controller中获取用户名/用户信息(用户名密码+token),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

UserRealm登录

Shiro登录后会将用户信息保存在Subject中,假如使用用户名密码登录,你的用户名、密码就会保存在token中。token在认证时候,也就是执行(doGetAuthenticationInfo)的时候,可以将token转化为UsernamePasswordToken ,通过UsernamePasswordToken你可以进行认证、并且在Controller中获取这个信息。
我的执行认证的代码如下:

``
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
//System.out.println("执行了=》认证:doGetAuthenticationInfo");
UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) token;
User user = userService.queryUserByName(usernamePasswordToken.getUsername());
if (user == null){
return null;
}
//密码认证shiro做,无须手动进行比较
return new SimpleAuthenticationInfo(user , user.getPassWord() , "UserRealm");
}

``
注意Return这里:SimpleAuthenticationInfo有三个参数:

  1. user:在这里放入了,后面的principals可以强行转化为user类。
  2. password:这个是数据库中用户的密码,注意不需要在使用usernamePasswordToken.getPassword()这个函数,完全无须自己调用比较密码,shiro会完成用户密码和前端传入的比较。
  3. “UserRealm”,realmName的初始化,可以空着,但是建议自己填写上,有些情况你会用到了。
 return new SimpleAuthenticationInfo(user , user.getPassWord() , "UserRealm");

说了这么多,怎么在Controller里面获取用户名/User信息呢?代码如下:

User user = (User) SecurityUtils.getSubject().getPrincipal();

前面的return里面把user信息放入,这里就可以取出来了。假如放回参数你都用默认的也就是下面的写法,Principal就是原始的信息,你需要做如下处理:

//返回参数第一个空白
return new SimpleAuthenticationInfo( , user.getPassWord() , "UserRealm");
//你在Controller里面用下面的语句就行了:usernamePasswordToken 立马保存了用户填写的用户名、密码,不建议这么用
UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) token;

Token登录

Token登录和上面的不同就在于你需要把token信息按照自己的需求解析出来,用来初始化你自定义的JwtTokenRealm,初始化后,在认证阶段,你把token解码,然后把解码后的的明文信息获取到,我获取的是userName。完成认证后,根据userName获取user信息,然后把user设为return的第一个参数。后面流程就和上面一样了。

总结:

核心思想要知道,你提交的所有信息,都在subject中,而subject可以通过SecurityUtils获取。subject中的principal就可以保存用户登录后的信息了,你在Controller里面获取了Subject,就可以获取所有信息了。

最后

以上就是昏睡太阳为你收集整理的Shiro学习:如何在Controller中获取用户名/用户信息(用户名密码+token)的全部内容,希望文章能够帮你解决Shiro学习:如何在Controller中获取用户名/用户信息(用户名密码+token)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部