Springboot + Spring Security 实现前后端分离登录认证及权限控制

Springboot + Spring Security 实现前后端分离登录认证及权限控制
前言

   关于Spring Security的概念部分本文不进行赘述,本文主要针对于对Spring Security以及Springboot有一定了解的小伙伴,帮助大家使用Springboot + Spring Security 实现一个前后端分离登录认证的过程。

    文章会一步一步循序渐进的带大家敲一遍代码。最终的代码请看最后。

    代码中我用到了插件lombok来生成实体的getter/setter,如果不想装插件请自己补全getter/setter

本文主要的功能

1、前后端分离用户登录认证
2、基于RBAC(角色)的权限控制

文章目录

1、准备工作
2、数据库表设计
3、Spring Security核心配置:WebSecurityConfig
4、用户登录认证逻辑:UserDetailsService
5、用户密码加密
6、屏蔽Spring Security默认重定向登录页面以实现前后端分离功能
7、实现登录成功/失败、登出处理逻辑
8、会话管理(登录过时、限制单用户或多用户登录等)
9、实现基于JDBC的动态权限控制
10、结束语

文章正文
一、准备工作
1、统一错误码枚举

/**

  • @Author: Hutengfei
  • @Description: 返回码定义
  • 规定:
  • #1表示成功
  • #1001~1999 区间表示参数错误
  • #2001~2999 区间表示用户错误
  • #3001~3999 区间表示接口异常
  • @Date Create in 2019/7/22 19:28
    / public enum ResultCode { / 成功 */
    SUCCESS(200, “成功”), /* 默认失败 */
    COMMON_FAIL(999, “失败”), /* 参数错误:1000~1999 */
    PARAM_NOT_VALID(1001, “参数无效”),
    PARAM_IS_BLANK(1002, “参数为空”),
    PARAM_TYPE_ERROR(1003, “参数类型错误”),
    PARAM_NOT_COMPLETE(1004, “参数缺失”), /* 用户错误 */
    USER_NOT_LOGIN(2001, “用户未登录”),
    USER_ACCOUNT_EXPIRED(2002, “账号已过期”),
    USER_CREDENTIALS_ERROR(2003, “密码错误”),
    USER_CREDENTIALS_EXPIRED(2004, “密码过期”),
    USER_ACCOUNT_DISABLE(2005, “账号不可用”),
    USER_ACCOUNT_LOCKED(2006, “账号被锁定”),
    USER_ACCOUNT_NOT_EXIST(2007, “账号不存在”),
    USER_ACCOUNT_ALREADY_EXIST(2008, “账号已存在”),
    USER_ACCOUNT_USE_BY_OTHERS(2009, “账号下线”), /* 业务错误 */
    NO_PERMISSION(3001, “没有权限”);
    private Integer code;
    private String message; ResultCode(Integer code, String message) {
    this.code = code;
    this.message = message;
    } public Integer getCode() {
    return code;
    } public void setCode(Integer code) {
    this.code = code;
    } public String getMessage() {
    return message;
    } public void setMessage(String message) {
    this.message = message;
    } /**
    • 根据code获取message
      *
    • @param code
    • @return
      */
      public static String getMessageByCode(Integer code) {
      for (ResultCode ele : values()) {
      if (ele.getCode().equals(code)) {
      return ele.getMessage();
      }
      }
      return null;
      }
      }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至22018681@qq.com 举报,一经查实,本站将立刻删除。

Like (0)
Donate 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
森林服务号的头像森林服务号
Previous 2022年4月11日
Next 2022年4月11日

相关推荐

发表回复

Please Login to Comment