这里以简单的登陆为例子

控制器对应的登陆方法:

  1. @RequestMapping(value = "/login", method = RequestMethod.GET)
  2. public String login(@RequestParam("username") String username, @RequestParam("password") String password){
  3. // 获取当前的 Subject. 调用 SecurityUtils.getSubject();
  4. Subject currentUser = SecurityUtils.getSubject();
  5. // 测试当前的用户是否已经被认证. 即是否已经登录.
  6. // 调动 Subject 的 isAuthenticated()
  7. if (!currentUser.isAuthenticated()) {
  8. // 把用户名和密码封装为 UsernamePasswordToken 对象
  9. UsernamePasswordToken token = new UsernamePasswordToken(username, password);
  10. // rememberme
  11. token.setRememberMe(true);
  12. try {
  13. System.out.println("UsernamePasswordToken:");
  14. System.out.println("hashCode:" + token.hashCode());
  15. System.out.println("Principal:" + token.getPrincipal());
  16. System.out.println("Credentials:" + String.valueOf((char[]) token.getCredentials()));
  17. System.out.println("host:" + token.getHost());
  18. System.out.println("Username:" + token.getUsername());
  19. System.out.println("Password:" + String.valueOf(token.getPassword()));
  20. // 执行登录.
  21. currentUser.login(token);
  22. }
  23. // ... catch more exceptions here (maybe custom ones specific to your application?
  24. // 所有认证时异常的父类.
  25. catch (AuthenticationException ae) {
  26. //unexpected condition? error?
  27. System.out.println("login failed :" + ae.getMessage());
  28. }
  29. }
  30. return "redirect:/index.jsp";
  31. }

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

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

一个简单的例子:

  1. public class ShiroRealm extends AuthenticatingRealm {
  2. @Resource
  3. private AdminService adminService;
  4. @Override
  5. protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
  6. System.out.println("AuthenticationToken:");
  7. System.out.println("hashCode:" + authenticationToken.hashCode());
  8. System.out.println("Principal:" + authenticationToken.getPrincipal());
  9. System.out.println("Credentials:" + authenticationToken.getCredentials().toString());
  10. return null;
  11. }
  12. }

打印结果:

注意:

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

源代码,见图:

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

shiro框架的UsernamePasswordToken与对应Realm中的AuthenticationToken的一点比较的更多相关文章

  1. shiro框架的UsernamePasswordToken与对应Realm中的AuthenticationToken的一点比较(转)

    这里以简单的登陆为例子 控制器对应的登陆方法: @RequestMapping(value = "/login", method = RequestMethod.GET) publ ...

  2. 30、shiro框架入门2,关于Realm

    1.Jdbc的Realm链接,并且获取权限 首先创建shiro-jdbc.ini的配置文件,主要配置链接数据库的信息 配置文件中的内容如下所示 1.变量名=全限定类名会自动创建一个类实例 2.变量名. ...

  3. shiro框架学习-3- Shiro内置realm

    1. shiro默认自带的realm和常见使用方法 realm作用:Shiro 从 Realm 获取安全数据 默认自带的realm:idae查看realm继承关系,有默认实现和自定义继承的realm ...

  4. 记录心得-shiro框架demo示例

    从懵懂到了解,再到熟悉,是一个进步的过程! 先撸代码,跑起来看效果,再做详细的介绍,开始干活! 1,先列出工程目录结构,自己需要创建对应层级的程序和相关配置文件. 2,导入maven依赖的jar包.打 ...

  5. Shiro框架 (原理分析与简单实现)

    Shiro框架(原理分析与简单实现) 有兴趣的同学也可以阅读我之前分享的:Java权限管理(授权与认证)CRM权限管理   (PS : 这篇博客里面的实现方式没有使用框架,完全是手写的授权与认证,可以 ...

  6. shiro框架总结

    一.概念 shiro是一个安全框架,主要可以帮助我们解决程序开发中认证和授权的问题.基于拦截器做的权限系统,权限控制的粒度有限,为了方便各种各样的常用的权限管理需求的实现,,我们有必要使用比较好的安全 ...

  7. shiro 框架

    惊天给大家总结一点shiro框架的小知识 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理.使用Shiro的易于理解的API,您可以快速.轻松地获得任何应 ...

  8. 项目一:第十四天 1.在realm中动态授权 2.Shiro整合ehcache 缓存realm中授权信息 3.动态展示菜单数据 4.Quartz定时任务调度框架—Spring整合javamail发送邮件 5.基于poi实现分区导出

    1 Shiro整合ehCache缓存授权信息 当需要进行权限校验时候:四种方式url拦截.注解.页面标签.代码级别,当需要验证权限会调用realm中的授权方法   Shiro框架内部整合好缓存管理器, ...

  9. shiro框架学习-5-自定义Realm

    1. 自定义Realm基础 步骤: 创建一个类 ,继承AuthorizingRealm->AuthenticatingRealm->CachingRealm->Realm 重写授权方 ...

随机推荐

  1. Linux下简单的缓冲区溢出

    缓冲区溢出是什么? 科班出身,或者学过汇编的应该知道,当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被“撑爆”,从而覆盖了相邻内存区域的数据 成功修改内存数据,可造成进程劫持 ...

  2. Spring Security(五):2.2 History

    Spring Security began in late 2003 as "The Acegi Security System for Spring". A question w ...

  3. # 20175329 2018-2019-2 《Java程序设计》第二周学习总结

    # 学号 2018-2019-3<Java程序设计>第三周学习总结 ## 教材学习内容总结 第二三章与我们所学习的C语言有很多的相似点,在这里我想主要就以我所学习的效果来讨论一下JAVA与 ...

  4. SimpleDialogBox

    import 'package:flutter/material.dart';import 'dart:ui';import 'dart:async';enum Option{A,B,C}void m ...

  5. Recurrent Neural Network[SRU]

    0.背景 对于如机器翻译.语言模型.观点挖掘.问答系统等都依赖于RNN模型,而序列的前后依赖导致RNN并行化较为困难,所以其计算速度远没有CNN那么快.即使不管训练的耗时程度,部署时候只要模型稍微大点 ...

  6. 【IE11请求中止】 XMLHttpRequest: 网络错误 0x2ef3的意外出现

    BUG现象 今天排查BUG遇到一个有趣的BUG,测试的截图显示 这个BUG只在IE11下出现. BUG原因 这个问题的原因是keep-alive机制引起. 当浏览器在向一个网址发起请求时,会建立一个t ...

  7. matplotlib 入门之The Lifecycle of a plot

    文章目录 Note 数据 准备开始 操控风格 我错了!!! 定制图像 特别注意!!! figsize=(width, height)!!! 格式化标签 组合多个可视化对象? 保存你的图片 matplo ...

  8. 详解ES5和ES6的继承

    ES5继承 构造函数.原型和实例的关系:每一个构造函数都有一个原型对象,每一个原型对象都有一个指向构造函数的指针,而每一个实例都包含一个指向原型对象的内部指针, 原型链实现继承 基本思想:利用原型让一 ...

  9. ImportError: DLL load failed: 找不到指定的模块。

    这里用的anacoda,报错是找不到DLL,可能是该DLL的环境变量没配置,配置系统环境变量: 重启一下pycharm,OK.

  10. beego 各种形式的路由实例

    基本路由 基本路由就是和http.Handle和http.HandleFunc一样都是绑定固定的路径,比如绑定了4个路由映射: 定义的4个控制器中,匹配哪一个路由,就输出对应的控制名. beego.R ...