Spring-shiro-Boot-8 shiro项目中的实现登录-Login

本文介绍了一个实际项目中使用Shiro进行登录的详细步骤,包括前端序列化JSON对象,过滤器处理授权和登出,Controller中处理登录请求(包括传统和RESTful方式),以及Shiro Realm的认证逻辑,涉及UsernamePasswordToken、session和token的管理。

实际项目中,使用shiro后登录的实例:

一、登录前端

(1)序列化提交表单

把form表单的值序列化成一个json对象,如{username:admin,password:admin123}

$("#login-form").serialize()

(2)表单

     <form id="form1">
        <input name="username" type="text" value="" />
        <input name="password" type="text" value="" />
     </form>

(3)提交

        $.ajax({
            type : 'post',
            url : '/sys/login',
            data : $("#login-form").serialize(),
            success : function() {
                location.href = '/';
            })

二、filter

进入过滤器---authc---根据token从redis中获取shiro的UsernamePasswordToken

进入过滤器---logout---根据token从redis中删除shiro的UsernamePasswordToken

//静态资源等:匿名过滤器
 filterChainDefinitionMap.put("/img/**", "anon"); 
/登出:登出过滤器 - 自定义
 filterChainDefinitionMap.put("/logout", "logout");
//一般:认证过滤器 - 自定义
 filterChainDefinitionMap.put("/**", "authc");

三、Controller

处理登录请求。

(1)传统登录:登录成功后设置session过期时间

(2)restful登陆:将token保存在redis中。

key:"tokens:UUID"    value:"usernamePasswordToken.toJSON"

shiro下,两种登录方式:

(1)session

    @LogAnnotation
	@ApiOperation(value = "web端登陆")
	@PostMapping("/sys/login")
	public void login(String username, String password) {
		UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(username, password);
		SecurityUtils.getSubject().login(usernamePasswordToken);
		// 设置shiro的session过期时间
		SecurityUtils.getSubject().getSession().setTimeout(serverProperties.getServlet().getSession().getTimeout().toMillis());
	}

(2)token

	@LogAnnotation
	@ApiOperation(value = "Restful方式登陆,前后端分离时登录接口")
	@PostMapping("/sys/login/restful")
	public Token restfulLogin(String username, String password) {
		UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(username, password);
		SecurityUtils.getSubject().login(usernamePasswordToken);

		return tokenManager.saveToken(usernamePasswordToken);
	}

注:使用token并不是就没有session了。只是token对应了session,而且是shiro去管理的。

四、shiro-Realm

controller调用shiro认证之后,会交由shiro。

最终会在MyShiroRealm调用--doGetAuthenticationInfo--进行验证。

主要业务逻辑为:

(1)根据usernamePasswordToken获取用户名,判断用户是否存在

(2)判断用户密码

(3)判断用户状态

(4)将登录用户放入session

	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
    ...
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

良之才-小良

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值