shiro框架---认证

来源:互联网 发布:游戏推广联盟源码 编辑:程序博客网 时间:2024/05/23 21:18

和大家分享一下基础的shiro框架---认证:


Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。

今天就是说一下shiro的简单验证登录的功能:


首先得引入依赖:

     <dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.3.2</version>
</dependency>


1.新建一个shiro.ini(注意:我这个写的是一个死文件,就是定义一些用户名和密码,进攻初学者理解shiro) 

然后在里面写上一  用户名=密码  的格式:

     [users]
       admin=123
       test=123456    注意,users必须是users,别随便定义,然后 我这里有两个用户名和密码,其中admin的密码就是123.

然后我们就可以用shiro来测试一下验证登录:

               

                 1.读取配置文件shiro.ini获取到(安全管理器)SecurityManager工厂

                 Factory<SecurityManager> factory=new iniSecurityManagerFactory("classpath:shiro.ini");
 

2.通过工厂获取SecurityManager

                SecurityManager securityManager=factory.getInstance();

                     3.将安全管理器加入到当前的认证环境中

                      SecurityUtils.setSecurityManager(securityManager);

                      4.得到subject

                      Subject subject=SecurityUtils.getSubject();

                      //创建令牌,也就是得到你需要验证的帐号或密码:

                       AuthenticationToken token=new UsernamePassword("admin","123");  这个是我传过来的账户和密码

                     //验证:

                      subject.login(token);

                       boolean isAuthenticated=subject.isAuthenticated();

                        sysotem.out.println("认证:"+isAuthenticated);

 

                       返回true,你就登录成功了,如过你输入错误的账户或密码,他可能会报错,这时候你需要在      subject.login(token)      try一下,这里我就不try了。


2.你也可以自己写一个,一般是自己写一个,上面只是仅供娱乐测试,

下面,自己定义一个myrealm类,继承AuthorizingRealm

重写两个方法:

doGetAuthorizationInfo(授权)

doGetAuthenticationInfo(认证)

今天主要说的是 doGetAuthenticationInfo(认证)这个方法:在这个方法里面调用dao方法,然后将用户名和密码存进AuthentiacationInfo里面,这也是你需要返回的,下面上代码:

//认证
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
// TODO Auto-generated method stub

UsernamePasswordToken token2=(UsernamePasswordToken) token;

String uname=token2.getUsername();
System.out.println("输入的用户名"+uname);     //这个是你输入的用户名


//根据名字查询:
String pwd=new UserDao().search("admin");

AuthenticationInfo authenticationInfo=new SimpleAuthenticationInfo(uname,pwd,"");    //最后这个可以为空,但当你有多个myrealm文件时就不能为空了,就需要写上this.getName();



return authenticationInfo;
}

 然后你再写一个shiro-myrealm.ini文件,读取到你所写的myrealm类;下面马代码:

  myRealm=com.shiro.MyRealm     (这个是你刚刚所写的类的全限名,至于myRealm你随便定义就好)  
securityManager.realms=$myRealm  

然后进行测试,测试代码和上面一样,但是读取 shiro-realm.ini  文件

   1.读取配置文件shiro.ini获取到(安全管理器)SecurityManager工厂

                 Factory<SecurityManager> factory=new iniSecurityManagerFactory("classpath:shiro-myreaml.ini");
 

2.通过工厂获取SecurityManager

                SecurityManager securityManager=factory.getInstance();

                     3.将安全管理器加入到当前的认证环境中

                      SecurityUtils.setSecurityManager(securityManager);

                      4.得到subject

                      Subject subject=SecurityUtils.getSubject();

                      //创建令牌,也就是得到你需要验证的帐号或密码:

                       AuthenticationToken token=new UsernamePassword("admin","123");  这个是我传过来的账户和密码

                     //验证:

                      subject.login(token);

                       boolean isAuthenticated=subject.isAuthenticated();

                        sysotem.out.println("认证:"+isAuthenticated);

 

                       返回true,你就登录成功了,如过你输入错误的账户或密码,他可能会报错,这时候你需要在      subject.login(token)      try一下,这里我就不try了。


好了,这些就是shiro最最基础的验证,希望对初学者有用,也记录一下自己所整理的shiro,明天再分享一下 shiro的授权的底层。



原创粉丝点击