java实现shiro认证流程

步骤:

  1. 自定义Realms【继承Authentication】
  2. 创建shiro配置文件【建立SecuriryManager与Realm关联】
  3. 编写认证测试代码
  4. 编写认证的核心代码

1. 自定义Realms【继承Authentication】

package com.shiro.realms;


import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;

public class MySelfRealm  extends AuthorizingRealm {
    /**
     * 授权方法
     * @param principalCollection
     * @return
     */
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        return null;
    }
    /**
     * 认证方法
     * @param authenticationToken
     * @return
     */
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        //用户信息认证
        UsernamePasswordToken token = (UsernamePasswordToken)authenticationToken;
        String username = token.getUsername();
        //验证用户名
        if(!"zxc".equals(username)){
            return null;//对应UnknownAccountException
        }
        //验证密码[密码不正确,IncorrectCredentialsException]
        AuthenticationInfo info = new SimpleAuthenticationInfo("returndata","1231","");

        return info;
    }
}

2. 创建shiro.ini配置文件【建立SecuriryManager与Realm关联】

#【建立SecuriryManager与Realm关联】
MySelfRealm=com.shiro.realms.MySelfRealm

securityManager.realm=$MySelfRealm

3. 编写认证测试代码

package com.shiro;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
import org.apache.shiro.mgt.SecurityManager;

public class AuthenticationTest {
    public static void main(String[] args) {
        //1、创建管理器工厂
        Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");

        //2、创建安全管理器
        SecurityManager securityManager = factory.getInstance();

        //3、初始化SecurityUtils工具类
        SecurityUtils.setSecurityManager(securityManager);

        //4、通过SecurityUtils获取Subject
        Subject subject = SecurityUtils.getSubject();


        try {
            //5、认证操作
            AuthenticationToken authenticationToken = new UsernamePasswordToken("zxc","123");
            subject.login(authenticationToken);
            //6、获取认证结果
            Object principle = subject.getPrincipal();
            System.out.println("登录成功,获得的principle:" + principle);
        }catch (UnknownAccountException em){
            System.out.println("用户不存在!");
        }catch (IncorrectCredentialsException em){
            System.out.println("密码输入错误!");
        }
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值