遵义市网站建设_网站建设公司_Tailwind CSS_seo优化
2026/1/16 15:07:14 网站建设 项目流程

​然然管理系统仓库地址,烦劳去仓库点个小星星
https://gitee.com/OceanCore/ranran.git
https://github.com/qiaoting/ranran.git

引言

在现代前后端分离架构中,认证授权是系统安全的核心环节。然然管理系统采用 Spring Security 结合 JWT(JSON Web Token)实现无状态认证,并通过自定义权限校验逻辑实现细粒度的权限控制。本文将深入解析该系统的认证授权架构,带你掌握企业级权限管理的设计思路。

一、整体架构设计

然然管理系统的认证授权链路主要包含以下组件:

  • JWT 令牌:用于存储用户身份信息,实现无状态认证
  • Spring Security:核心安全框架,负责认证流程管理
  • 自定义过滤器(JwtRequestFilter):拦截请求并验证 JWT 令牌
  • 权限检查服务(PermissionCheckService):实现业务级权限校验
  • 用户详情服务(MysqlUserDetailsService):加载用户信息及权限集合

核心流程:客户端登录 → 服务端生成 JWT 令牌 → 客户端携带令牌请求资源 → 过滤器验证令牌 → 权限服务校验权限 → 访问资源

二、核心组件实现解析

1. Spring Security 配置(SecurityConfig)

该类是安全配置的核心,主要负责:

  • 禁用 CSRF(前后端分离场景)
  • 配置无状态会话(STATELESS)
  • 放行公开接口(登录、验证码等)
  • 注册 JWT 过滤器和跨域过滤器
  • 配置密码加密方式(BCrypt)
@Configuration @EnableMethodSecurity() public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) { httpSecurity.csrf(csrf -> csrf.disable()) .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .authorizeHttpRequests(auth -> auth .requestMatchers("/upload/**", "/captcha/**", "/api/auth/login").permitAll() .anyRequest().authenticated() ) .addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class); return httpSecurity.build(); } }
2. JWT 令牌处理(JwtService)

负责 JWT 的生成、解析、刷新及用户信息存储:

  • 使用 HMAC-SHA512 算法签名令牌
  • 结合 Redis 存储用户登录状态,支持令牌过期管理
  • 实现令牌自动刷新机制(接近过期时延长有效期)
public String createToken(LoginUser loginUser) { String uuid = UUID.randomUUID().toString().replace("-", ""); loginUser.setUuid(uuid); // 存储用户信息到Redis refreshToken(loginUser); // 生成JWT令牌 Map<String, Object> claims = new HashMap<>(); claims.put(Constant.LOGIN_KEY_USER, uuid); return Jwts.builder() .setClaims(claims) .signWith(Keys.hmacShaKeyFor(secret.getBytes()), SignatureAlgorithm.HS512) .compact(); }
3. 令牌验证过滤器(JwtRequestFilter)

拦截所有请求并验证 JWT 有效性:

  • 从请求头提取令牌
  • 解析令牌获取用户信息
  • 将用户身份存入 SecurityContext,供后续权限校验使用
@Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) { String token = RequestUtil.getToken(request); if (StrUtil.hasText(token)) { try { LoginUser loginUser = jwtService.getLoginUser(request); // 验证通过,设置认证信息 UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken( loginUser, null, loginUser.getAuthorities()); SecurityContextHolder.getContext().setAuthentication(authToken); } catch (Exception e) { returnErrorResponse(response); // 验证失败返回401 return; } } filterChain.doFilter(request, response); }
4. 权限校验服务(PermissionCheckService)

实现业务级权限判断逻辑:

  • 支持管理员超级权限(ADMIN_PERMISSION)
  • 验证当前用户是否拥有目标权限
public boolean hasPermission(String permission) { LoginUser loginUser = SecurityUtil.getLoginUser(); if (ObjUtil.isNull(loginUser) || CollUtil.isEmpty(loginUser.getPermissions())) { return false; } // 管理员拥有所有权限 return loginUser.getPermissions().contains(Constant.ADMIN_PERMISSION) || loginUser.getPermissions().contains(StrUtil.trim(permission)); }
三、前端集成

待后续讲解前端部分

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询