//1、获取SecurityManager工厂,此处使用Ini配置文件初始化SecurityManager
Factory<org.apache.shiro.mgt.SecurityManager> factory =
new IniSecurityManagerFactory(configFile); //2、得到SecurityManager实例 并绑定给SecurityUtils
org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager); SecurityUtils.setSecurityManager(securityManager)源码:
* *
*设置一个VM(静态)单例SecurityManager,专门用于透明使用
* {@link #getSubject() getSubject()}实现。
* < p / >
* <b>此方法调用主要用于框架开发支持。应用程序开发人员很少,
*如果需要,需要调用这个方法。</b>
* < p / >
Shiro开发团队更喜欢SecurityManager实例是非静态的单例应用程序
*和<em>不是</em> VM静态单例。不使用静态内存的应用程序单例需要一些排序
*应用程序配置框架,为您维护应用程序范围的SecurityManager实例
*(例如,Spring或EJB3环境),这样对象引用就不需要是静态的。
* < p / >
在这些环境中,Shiro通过自己的线程根据当前正在执行的线程获取主题数据
*框架集成代码,这是使用Shiro的首选方式。
* < p / >
*然而在一些环境中,例如一个独立的桌面应用程序或applet不使用Spring或
* EJB或类似的配置框架,VM-singleton可能更有意义(尽管前者仍然是首选)。
*在这些环境中,通过此方法设置SecurityManager将自动启用
* {@link #getSubject() getSubject()}调用函数,配置很少。
* < p / >
*例如,在这些环境中,这将工作:
* <前>
* DefaultSecurityManager securityManager = new {@link org.apache.shiro.mgt。DefaultSecurityManager DefaultSecurityManager} ();
* securityManager。setRealms (…);//一个或多个域
* < b > SecurityUtils。setSecurityManager (securityManager); < / b > < / pre >
* < p / >
*然后在应用程序代码的任何地方,下面的调用将返回应用程序的主题:
* <前>
* currentUser = securityutil . getsubject ();</pre>
*
* @param securityManager将securityManager实例设置为一个VM静态单例。
* /
public void setSecurityManager(SecurityManager SecurityManager) {
SecurityUtils。securityManager = securityManager;
} //3、得到Subject及创建用户名/密码身份验证Token(即用户身份/凭证)
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username, password); UsernamePasswordToken(username, password):源码:
/ * *
*构造一个新的UsernamePasswordToken,封装提交的用户名和密码
*在验证过程中,使用<tt>null</tt> {@link #getHost() host}和
* a <tt>remember berme </tt> default <tt>false</tt>
* < p / >
* <p>这是一个方便的构造函数,通过一个字符在内部维护密码
* array,即<tt>password.toCharArray();注意,将密码存储为字符串
*在您的代码中可能存在安全隐患,如类JavaDoc.</p>中所述
*
提交认证的用户名
提交用于身份验证的密码字符串
* /
public UsernamePasswordToken(final String username, final String password) {
this(username, password != null ? password.toCharArray() : null, false, null);
} subject.login(token):源码:
/ * *
*为该主题/用户执行一次登录尝试。
如果不成功,
抛出{@link AuthenticationException},它的子类表示尝试失败的原因。
*如果成功,与提交的主体/凭证相关联的帐户数据将是
*与这个{@code Subject}相关联,该方法将悄悄地返回。
* < p / >
*静悄悄返回后,可以考虑这个{@code Subject}实例
* authenticated和{@link #getPrincipal() getPrincipal()}将是非空的
* {@link #isAuthenticated() isAuthenticated()}将是{@code true}。
*
* @param令牌该令牌封装了要传递给的主题的主体和凭据
*验证子系统。
* @throws org.apache.shiro.authc.AuthenticationException
*如果身份验证尝试失败。
* @since 0.9
* /
void login(AuthenticationToken token) throws AuthenticationException;

最新文章

  1. C# MVC 5 - 生命周期(应用程序生命周期&amp;请求生命周期)
  2. Solr学习总结(三)Solr web 管理后台
  3. Arrays.asList()注意
  4. Python中的变量、引用、拷贝和作用域
  5. Azure 云助手正式发布
  6. Android中使用speex将PCM录音格式转Wav格式
  7. Cocos移植到Android-使用Eclipse交叉编译打包
  8. w3c subscribe
  9. USACO6.5-Closed Fences:计算几何
  10. JavaScript 事件 事件流 事件对象 事件处理程序 回调函数 error和try...catch和throw
  11. MySQL学习基础知识2
  12. pecl 更换对应php版本
  13. OC对象,自动释放池,OC与C语言的区别
  14. 我的C#跨平台之旅(二):开发最为简单的REST API
  15. linux 安装Brew
  16. 015-线程同步-synchronized几种加锁方式、Java对象头和Monitor、Mutex Lock、JDK1.6对synchronized锁的优化实现
  17. iOS本地化应用程序
  18. 待解决:PDF header signature not found
  19. python3 集合的常用方法
  20. arp攻击的处理方法

热门文章

  1. go反射原理
  2. HTMLTestRunner.py 文件,已修改完成
  3. 2021年BI软件排名,国内外BI软件功能对比
  4. RTB1靶机
  5. noip模拟31[time&#183;game&#183;cover]
  6. Java 使用 Apache commons-math3 线性拟合、非线性拟合实例(带效果图)
  7. Java 反射(一)反射简介、原理和应用场景
  8. Vulnhub -- DC3靶机渗透
  9. Java流程控制02——顺序结构
  10. Java Stream 自定义Collector