当前位置: 首页 > news >正文

交易 网站备案wordpress皮肤下载站

交易 网站备案,wordpress皮肤下载站,app快速生成平台,网页游戏网站模板构建现代微服务安全体系#xff1a;Spring Security、JWT 与 Spring Cloud Gateway 实践 本文将基于提供的代码示例#xff0c;详细介绍如何在一个Java微服务项目中使用Spring Security、JWT和Spring Cloud Gateway来构建一个高效且安全的微服务体系#xff0c;并整合性能优…构建现代微服务安全体系Spring Security、JWT 与 Spring Cloud Gateway 实践 本文将基于提供的代码示例详细介绍如何在一个Java微服务项目中使用Spring Security、JWT和Spring Cloud Gateway来构建一个高效且安全的微服务体系并整合性能优化措施。 基础流程 登录认证客户端通过用户名和密码获取JWT 流程描述客户端发送包含用户名和密码的登录请求到身份验证端点。服务器验证这些凭据的有效性后使用JwtTokenProvider生成一个JWT并将其返回给客户端。 关键点 客户端在成功登录后保存JWT通常是在HTTP头中以Authorization: Bearer 的形式携带。 JWT包含了用户的身份信息如用户ID、角色等以及过期时间。请求路由Gateway验证JWT签名和基础有效性 流程描述当客户端发起API请求时Spring Cloud Gateway首先拦截请求通过JwtAuthenticationWebFilter过滤器来验证JWT的签名是否正确及令牌的基础有效性如是否过期。 关键点 使用JwtTokenProvider中的方法来解析和验证JWT。 如果验证失败直接返回错误响应如果成功则继续处理请求。上下文传递微服务解析JWT生成SecurityContext 流程描述一旦Gateway验证了JWT的有效性请求被转发到相应的微服务。在微服务内部JwtAuthenticationTokenFilter再次检查JWT从中提取用户信息并创建UsernamePasswordAuthenticationToken对象然后将这个对象设置到Spring Security上下文中。 关键点 JwtTokenProvider用于从JWT中提取用户信息如用户ID、角色等并据此构建认证对象。 这个步骤确保了每个请求都能在微服务层面上识别出当前用户及其权限。权限校验方法级注解实现动态权限控制 流程描述在微服务的方法上应用Spring Security提供的注解如PreAuthorize或Secured根据用户的角色或权限动态地控制对资源的访问。 关键点 利用Spring Security的表达式语言支持可以灵活地定义访问控制规则。 只有当用户的权限满足特定条件时才能执行受保护的方法或访问特定的资源。令牌刷新通过Refresh Token无感续期Access Token 流程描述为了延长用户的会话而不需重新登录系统提供了一个刷新令牌Refresh Token。当Access Token即将过期时客户端可以使用Refresh Token向服务器请求新的Access Token。 关键点 Refresh Token的安全存储非常重要应确保其不能轻易被第三方获取。 实现逻辑需要确保旧的Access Token失效并生成一个新的有效期内的Access Token返回给客户端。 具体实现 1. Spring Security 配置 首先我们从Spring Security配置开始。你已经提供了一个基本的SecurityConfig类它负责配置认证和授权管理。以下是基于你的代码示例进行的一些优化和扩展 Configuration EnableWebSecurity EnableGlobalMethodSecurity(prePostEnabled true) public class SecurityConfig extends WebSecurityConfigurerAdapter {Autowiredprivate UserDetailsServiceImpl userDetailsService;Autowiredprivate JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter;Autowiredprivate AuthenticationEntryPoint authenticationEntryPoint;Autowiredprivate AccessDeniedHandler accessDeniedHandler;Overrideprotected void configure(HttpSecurity http) throws Exception {http.csrf().disable().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class).authorizeRequests().antMatchers(/auth/register, /auth/login).permitAll().anyRequest().authenticated().and().exceptionHandling().authenticationEntryPoint(authenticationEntryPoint).accessDeniedHandler(accessDeniedHandler).and().cors();}Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());}Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}BeanOverridepublic AuthenticationManager authenticationManagerBean() throws Exception {return super.authenticationManagerBean();} }性能优化点: 禁用不必要的过滤器链: 如WebAsyncManagerIntegrationFilter等以减少过滤器链长度提高性能。启用预授权功能: 使用EnableGlobalMethodSecurity(prePostEnabled true)注解启用方法级别的权限控制减少不必要的安全性检查。 2. JWT Filter 实现 接下来是JWT过滤器的实现用于在请求到达服务之前验证JWT的有效性。这里我们还将集成缓存策略以提高性能。 Component public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {Autowiredprivate JwtTokenProvider jwtTokenProvider; // 使用JwtTokenProviderAutowiredprivate StringRedisTemplate redisTemplate;// Caffeine Cache for token parsing results cachingprivate final CacheString, Claims tokenCache Caffeine.newBuilder().maximumSize(1000).expireAfterWrite(10, TimeUnit.MINUTES).build();Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {String token request.getHeader(token);if (token null) {filterChain.doFilter(request, response);return;}Claims claims getCachedClaims(token);if (claims null) {// 使用JwtTokenProvider的validateToken方法验证token并获取Claimsif(jwtTokenProvider.validateToken(token)) {// 假设JwtTokenProvider有一个getClaimsFromToken方法用于获取Claimsclaims jwtTokenProvider.getClaimsFromToken(token);setCachedClaims(token, claims);} else {throw new RuntimeException(无效的JWT令牌);}}String userId (String) claims.get(userId);String redisKey login: userId;String userStr redisTemplate.opsForValue().get(redisKey);LoginUser loginUser JSONUtil.toBean(userStr, LoginUser.class);if (loginUser null) {throw new RuntimeException(用户未登录);}UsernamePasswordAuthenticationToken authenticationToken new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());SecurityContextHolder.getContext().setAuthentication(authenticationToken);filterChain.doFilter(request, response);}private Claims getCachedClaims(String token) {return tokenCache.getIfPresent(token);}private void setCachedClaims(String token, Claims claims) {tokenCache.put(token, claims);} }性能优化点: Caffeine Cache: 在解析JWT时先检查缓存避免重复解析带来的性能损耗。 3. Spring Cloud Gateway 中集成 JWT 验证 为了让Gateway能够提前验证JWT我们需要在Gateway层添加相应的过滤器。 import org.springframework.cloud.gateway.route.RouteLocator; import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;/** * 一个使用Spring Cloud Gateway的路由定位器RouteLocator它配置了一个路由规则 * 用于将匹配特定路径模式的请求转发到指定的服务并在转发前通过一个过滤器JwtAuthenticationWebFilter进行处理。 */ Configuration public class GatewayConfig {Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes().route(service_route, r - r.path(/service/**).filters(f - f.filter(new JwtAuthenticationWebFilter())).uri(lb://service)).build();} }public class JwtAuthenticationWebFilter implements GatewayFilter, Ordered {private final JwtTokenProvider jwtTokenProvider;public JwtAuthenticationWebFilter(JwtTokenProvider jwtTokenProvider) {this.jwtTokenProvider jwtTokenProvider;}/*** filter方法是过滤器的核心逻辑每当有请求经过时都会调用此方法。* 首先从请求中提取JWT令牌(resolveToken)。* 如果令牌存在且有效则使用jwtTokenProvider获取对应的认证信息(Authentication)。* 将认证信息设置到SecurityContext中以便后续处理可以访问到当前用户的身份信息。* 最后继续处理请求链(chain.filter(exchange))即将请求传递给下一个过滤器或目标服务*/Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request exchange.getRequest();String token resolveToken(request);if (token ! null jwtTokenProvider.validateToken(token)) {Authentication auth jwtTokenProvider.getAuthentication(token);SecurityContext securityContext SecurityContextHolder.createEmptyContext();securityContext.setAuthentication(auth);SecurityContextHolder.setContext(securityContext);}return chain.filter(exchange);}private String resolveToken(ServerHttpRequest request) {String bearerToken request.getHeaders().getFirst(Authorization);if (bearerToken ! null bearerToken.startsWith(Bearer )) {return bearerToken.substring(7);}return null;}Overridepublic int getOrder() {return -200; // 设置优先级} }4. JWT Token 的生成与刷新机制 为了提高用户体验可以实现refresh token机制允许用户通过refresh token获取新的access token。 PostMapping(/token/refresh) public ResponseEntity? refreshToken(RequestBody TokenRefreshRequest request) {String refreshToken request.getRefreshToken();if (jwtTokenProvider.validateToken(refreshToken)) {String accessToken jwtTokenProvider.generateAccessTokenFromUsername(jwtTokenProvider.getUsernameFromToken(refreshToken));return ResponseEntity.ok(new TokenRefreshResponse(accessToken, refreshToken));} else {return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(Invalid refresh token);} }5. 监控关键指标 为了及时发现潜在的安全威胁加入监听并记录Spring Security的安全事件。 EventListener public void monitorAuthEvents(AbstractAuthenticationEvent event) {if(event instanceof AuthenticationSuccessEvent){log.info(认证成功: {}, event.getAuthentication().getName());} else if(event instanceof AuthenticationFailureBadCredentialsEvent){metrics.increment(auth.failure.bad_credentials);} }这些措施包括了禁用不必要的过滤器链、使用Caffeine Cache缓存JWT解析结果等确保系统既安全又高效。
http://www.dnsts.com.cn/news/86448.html

相关文章:

  • 电商网站的流程图莱芜网站建设莱芜
  • 展示型网站建设的建议汕头网站制作哪里好
  • 周期购那个网站做的比较好网络平台指网站 建设项目所在地
  • 建站代理上海网站建设做物流一
  • 公司网站制作费用多少特乐网站建设
  • wordpress网站示例域名 删除 wordpress
  • 公司注册地址就是公司地址吗织梦网站怎么做seo
  • 网站百度收录怎么做做网站时空间的选择
  • 东营网站建设服务商网站建设合同书
  • 靖江有哪些做网站的如何自己做网页
  • 做黑彩网站图片牡丹江百姓网免费发布信息
  • 南宁学网站建设网页设计师作品集
  • wordpress主题站模板wordpress网站建设教程
  • 房地产开发公司网站建设方案做网站优化费用
  • 有没有做面粉美食的网站中国移动积分兑换商城官方网站
  • 品牌网站建设仁術大蝌蚪铜梁城乡建设网站
  • 免费的开源网站网站电话素材
  • 移动微网站网站页面优化
  • 网站信息内容建设自查报告电子商城网站开发支持手机端
  • 兰溪网站seo 百度网盘
  • 网站如何做好优化仿网站出售
  • 邹平网站设计网站色彩运用
  • 创新的邯郸网站建设wdcp 网站建设
  • 淘宝网站建设费用网络架构要求包括
  • 网站改版意见微软软件开发工程师待遇
  • 微网站开发协议wordpress格式化sql串
  • 事务所网站建设如何取消网站备案
  • 网站设计一般是什么专业seo做什么网站赚钱
  • 河南电力建设工程公司网站网站建设销售实训报告
  • 有哪些免费的视频网站广告公司简介ppt