这里以简单的登陆为例子

控制器对应的登陆方法:

@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login(@RequestParam("username") String username, @RequestParam("password") String password){
// 获取当前的 Subject. 调用 SecurityUtils.getSubject();
Subject currentUser = SecurityUtils.getSubject(); // 测试当前的用户是否已经被认证. 即是否已经登录.
// 调动 Subject 的 isAuthenticated()
if (!currentUser.isAuthenticated()) {
// 把用户名和密码封装为 UsernamePasswordToken 对象
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
// rememberme
token.setRememberMe(true);
try {
System.out.println("UsernamePasswordToken:");
System.out.println("hashCode:" + token.hashCode());
System.out.println("Principal:" + token.getPrincipal());
System.out.println("Credentials:" + String.valueOf((char[]) token.getCredentials()));
System.out.println("host:" + token.getHost());
System.out.println("Username:" + token.getUsername());
System.out.println("Password:" + String.valueOf(token.getPassword()));
// 执行登录.
currentUser.login(token);
}
// ... catch more exceptions here (maybe custom ones specific to your application?
// 所有认证时异常的父类.
catch (AuthenticationException ae) {
//unexpected condition? error?
System.out.println("login failed :" + ae.getMessage());
}
}
return "redirect:/index.jsp";
}

在这里打印了所有的UsernamePasswordToken的属性值

再在对应的Realm中打印一下接收的AuthenticationToken的所有属性值

一个简单的例子:

public class ShiroRealm extends AuthenticatingRealm {

    @Resource
private AdminService adminService; @Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
System.out.println("AuthenticationToken:");
System.out.println("hashCode:" + authenticationToken.hashCode());
System.out.println("Principal:" + authenticationToken.getPrincipal());
System.out.println("Credentials:" + authenticationToken.getCredentials().toString()); return null;
}
}

打印结果:

注意:

credentials这个属性,在UsernamePasswordToken中其实是个Object,查看源代码,getCredentials()方法返回的就是password

源代码,见图:

故,若要正确得到UsernamePasswordToken的password,可以将credentials转为char[]再String.valof()方法获得String。

最新文章

  1. CI3.0控制器下面建文件夹 访问一直404 的解决方法
  2. Arch Linux PDF格式文件无法显示中文
  3. ubuntu下面mysql,通过载入txt文件初始化数据表
  4. 【整理】--【字符设备】cdev_init()/cdev_alloc(),cdev_add(),cdev_del()
  5. 【BZOJ 3083】遥远的国度
  6. poj2386(简单dfs)
  7. 应对Memcached缓存失效,导致高并发查询DB的四种思路(l转)
  8. Leetcode--Add two number
  9. MongoDB 学习笔记(三)—— 修改器的使用
  10. iOS中关于KVC与KVO知识点
  11. Linux下使用dnf包管理器安装异常后导致的clear不可用
  12. maven打一个可执行的jar包
  13. iOS7动态调整文字大小
  14. 关于C#中程序功能实现,对代码选择的思考
  15. easyui时间框只选择年月
  16. 初入 vue
  17. Python科学计算学习之高级数组(二)
  18. C++指针和字符串
  19. Java_myBatis_xml代理写法
  20. scrollview滑动到某区域执行某种方法

热门文章

  1. sql server代理服务无法启动(SQL Agent):OpenSQLServerInstanceRegKey:GetRegKeyAccessMask failed (reason: 2).
  2. python学习-16 列表list
  3. Django 关联查询
  4. 图像人脸检测+人眼检测 (opencv + c++)
  5. django中使用redis保存session(转)
  6. 微信小微商户申请入驻 .NET C#实现微信小微商户进件API
  7. NodeJs 的Module.export 和 export
  8. ajax检查用户名重复
  9. Go Select使用
  10. python多线程与多进程异步事件框架