2026/3/3 23:36:40
网站建设
项目流程
上海网站建设运营站霸网络,吉安市建设局图审中心网站,西安黑马程序员培训机构,单页设计网站然然管理系统仓库地址#xff0c;烦劳去仓库点个小星星
https://gitee.com/OceanCore/ranran.git
https://github.com/qiaoting/ranran.git引言在现代前后端分离架构中#xff0c;认证授权是系统安全的核心环节。然然管理系统采用 Spring Security 结合 JWT#xff08;JSO…然然管理系统仓库地址烦劳去仓库点个小星星https://gitee.com/OceanCore/ranran.githttps://github.com/qiaoting/ranran.git引言在现代前后端分离架构中认证授权是系统安全的核心环节。然然管理系统采用 Spring Security 结合 JWTJSON Web Token实现无状态认证并通过自定义权限校验逻辑实现细粒度的权限控制。本文将深入解析该系统的认证授权架构带你掌握企业级权限管理的设计思路。一、整体架构设计然然管理系统的认证授权链路主要包含以下组件JWT 令牌用于存储用户身份信息实现无状态认证Spring Security核心安全框架负责认证流程管理自定义过滤器JwtRequestFilter拦截请求并验证 JWT 令牌权限检查服务PermissionCheckService实现业务级权限校验用户详情服务MysqlUserDetailsService加载用户信息及权限集合核心流程客户端登录 → 服务端生成 JWT 令牌 → 客户端携带令牌请求资源 → 过滤器验证令牌 → 权限服务校验权限 → 访问资源二、核心组件实现解析1. Spring Security 配置SecurityConfig该类是安全配置的核心主要负责禁用 CSRF前后端分离场景配置无状态会话STATELESS放行公开接口登录、验证码等注册 JWT 过滤器和跨域过滤器配置密码加密方式BCryptConfiguration 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令牌 MapString, 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)); }三、前端集成待后续讲解前端部分