Springboot整合之Shiro和JWT技术实现无感刷新5

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Springboot整合之Shiro和JWT技术实现无感刷新5

3.2 把令牌封装成认证对象
我们通过JwtUtil类可以生成 Token ,这个 Token 我们是要返回给客户端的。接下来 我们要把 JWT 和 Shiro框架 对接起来,这样 Shiro框架 就会拦截所有的Http请求,然后验证请求 提交的 Token 是否有效。
————————————————
image.png
客户端提交的Token 不能直接交给 Shiro 框架,需要先封装成 AuthenticationToken 类型的对象, 所以我们我们需要先创建 AuthenticationToken 的实现类。
```package com.example.emos.wx.config.shiro;

import org.apache.shiro.authc.AuthenticationToken;

public class OAuth2Token implements AuthenticationToken {
private String token;

public OAuth2Token(String token) {
    this.token = token;
}

@Override
public Object getPrincipal() {
    return token;
}

@Override
public Object getCredentials() {
    return token;
}

}

 3.3 创建OAuth2Realm类
        OAuth2Realm 类是 AuthorizingRealm 的实现类,我们要在这个实现类中定义认证和授权的方 法。因为认证与授权模块设计到用户模块和权限模块,现在我们还没有真正的开发业务模块,所 以我们这里先暂时定义空的认证去授权方法,把Shiro和JWT整合起来,在后续章节我们再实现 认证与授权。
————————————————
```package com.example.emos.wx.config.shiro;

import com.example.emos.wx.db.pojo.TbUser;
import com.example.emos.wx.service.UserService;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Set;

@Component
public class OAuth2Realm extends AuthorizingRealm {
    @Autowired
    private JwtUtil jwtUtil;

    @Autowired
    private UserService userService;

    @Override
    public boolean supports(AuthenticationToken token) {
        return token instanceof OAuth2Token;
    }

    /**
     * 授权(验证权限时调用)
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection collection) {
        //TODO 查询用户的权限列表
        //TODO 把权限列表添加到info对象中
        TbUser user= (TbUser) collection.getPrimaryPrincipal();
        int userId=user.getId();
        Set<String> permsSet=userService.searchUserPermissions(userId);
        SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();
        info.setStringPermissions(permsSet);
        return info;
    }

    /**
     * 认证(验证登录时调用)
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        //TODO 从令牌中获取userId,然后检测该账户是否被冻结。
        String accessToken=(String)token.getPrincipal();
        int userId=jwtUtil.getUserId(accessToken);
        TbUser user=userService.searchById(userId);

        if(user==null){
            throw new LockedAccountException("账号已被锁定,请联系管理员");
        }
        //TODO 往info对象中添加用户信息、Token字符串
        SimpleAuthenticationInfo info=new SimpleAuthenticationInfo(user,accessToken,getName());
        return info;
    }
}
相关文章
|
1月前
|
安全 数据安全/隐私保护
Springboot+Spring security +jwt认证+动态授权
Springboot+Spring security +jwt认证+动态授权
|
5天前
|
存储 JSON 算法
SpringBoot之JWT令牌校验
SpringBoot之JWT令牌校验
13 2
|
16天前
|
SQL 安全 Java
微服务之Springboot整合Oauth2.0 + JWT
微服务之Springboot整合Oauth2.0 + JWT
15 1
|
1月前
|
JSON 前端开发 Java
Springboot整合JWT
Springboot整合JWT
|
2月前
|
安全 算法 Java
SpringBoot+JWT+Shiro+MybatisPlus实现Restful快速开发后端脚手架
SpringBoot+JWT+Shiro+MybatisPlus实现Restful快速开发后端脚手架
29 0
|
JSON 前端开发 搜索推荐
springboot集成shiro自定义登陆过滤器
springboot集成shiro自定义登陆过滤器
208 0
|
Java
springboot集成shiro,ShiroConfig配置文件无法通过@Value加载yml变量的解决办法
springboot集成shiro,ShiroConfig配置文件无法通过@Value加载yml变量的解决办法
640 0
|
安全 Java
SpringBoot集成Shiro安全框架
你好: <input type="submit" value="退出"> ADMIN角色 USER角色 SUPERMAN角色 UPDATA权限 DELETE权限 INSERT权限 SELECT权限
773 0
|
Java Spring 缓存
spring boot 集成cache时,与shiro的冲突解决
最近想将cache 集成在项目中,原来计划上使用jetcache,但发现一直不成功.后面转成j2cache,但也是不成功.最后想基本的spring boot cache,但测试一直不成功! 后面上网查一下,发现原来与shiro有冲突.
2192 0
|
Java
springboot集成shiro
废话少说,先简单说下怎么用,至于shiro是什么,请移步shiro官网 1、添加依赖 org.apache.
1130 0