基于SpringSecurity 的登录详解(前后端分离)

前后端分离登录:JWT单点登录
摘要由CSDN通过智能技术生成

目录

登录总体流程

基于JWT和RSA的Token机制

JWT简介

RSA简介

SpringSecurity登录处理的配置

后端过滤器的Token解析

前端拦截器处理

登录总体流程

前后端分离登录和常规后台登录的区别

1.前后端交互方式不同

常规登录:  通过页面的跳转和模型数据绑定

前后端分离:  通过Ajax和JSON进行通信

2.登录状态跟踪方式不同

常规登录:  通过Session和Cookie保存用户状态

前后端分离:  通过Token保持用户状态

前后端分离的优点

1.彻底解放前端

前端不再需要向后台提供模板或是后台在前端html中嵌入后台代码

2.提高工作效率,分工更加明确

前后端分离的工作流程可以让前端管签单,后端管后端,前后端开发同时进行,增加了开发的灵活性。

3.局部性能提升

通过前端路由的配置,可以实现页面的按需加载,不用一开始就加载所有的资源,提升了用户体验。

4.降低维护成本

通过MVC框架,可以快速的定位问题所在,客户端的问题不再需要后台人员参与及调试,增强了代码的重构及可维护性。

总体流程

基于JWT和RSA的Token机制

JWT简介

JWT(JSON Web Tokens )是JSON格式的加密字符串,用于加密验证信息,在前后端进行通信

分为三个部分

1) 头部

2) 负载

3) 指纹

需要的依赖

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.0</version>
</dependency>

<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.9.9</version>
</dependency>

JWT工具类

/**
 * JWT工具类
 */
public class JwtUtil {

    public static final String JWT_KEY_USERNAME = "username";
    public static final int EXPIRE_MINUTES = 120;

    /**
     * 私钥加密token
     */
    public static String generateToken(String username,  PrivateKey privateKey, int expireMinutes) {

        return Jwts.builder()
                .claim(JWT_KEY_USERNAME, username)
                .setExpiration(DateTime.now().plusMinutes(expireMinutes).toDate())
                .signWith(SignatureAlgorithm.RS256, privateKey)
                .compact();
    }

    /**
     * 从token解析用户
     *
     * @param token
     * @param publicKey
     * @return
     * @throws Exception
     */
    public static String getUsernameFromToken(String token, PublicKey publicKey){
        Jws<Claims> claimsJws = Jwts.parser().setSigningKey(publicKey).parseClaimsJws(token);
        Claims body = claimsJws.getBody();
        String username = (String) body.get(JWT_KEY_USERNAME);
        return username;
    }
}

RSA简介

RSA是一种非对称式的加密算法

对称式加密只有一个秘钥,加密和解密都通过该秘钥完成

非对称式加密有两个秘钥,公钥和私钥,加密和解密由公钥和私钥分开完成

/**
 * RSA工具类
 */
public class RsaUtil {

    public static final String RSA_SECRET = "blbweb@#$%"; //秘钥
    public static final String RSA_PATH = System.getProperty("user.dir")+"/rsa/";//秘钥保存位置
    public static final String RSA_PUB_KEY_PATH = RSA_PATH + "pubKey.rsa";//公钥路径
    public static final String RSA_PRI_KEY_PATH = RSA_PATH + "priKey.rsa";//私钥路径

    public static PublicKey publicKey; //公钥
    public static PrivateKey privateKey; //私钥

    /**
     * 类加载后,生成公钥和私钥文件
     */
  
  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值