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

建设农产品网站总结ppt极简wordpress博客

建设农产品网站总结ppt,极简wordpress博客,常州网站建设智博,九网互联怎么建设网站Spring Cloud Gateway + JWT 单点登录实现方案 一、方案概述 本方案基于Spring Cloud微服务架构,通过网关统一认证和JWT令牌实现分布式系统的单点登录,移除了独立的认证服务器,简化架构同时保持安全性。核心技术组件包括: Spring Cloud Gateway:统一请求入口,负责认证、…

Spring Cloud Gateway + JWT 单点登录实现方案

一、方案概述

本方案基于Spring Cloud微服务架构,通过网关统一认证JWT令牌实现分布式系统的单点登录,移除了独立的认证服务器,简化架构同时保持安全性。核心技术组件包括:

  • Spring Cloud Gateway:统一请求入口,负责认证、授权和路由转发
  • JWT(Json Web Token):作为无状态令牌载体,包含用户身份和权限信息
  • Spring Security:提供认证和授权功能,集成在网关层
  • MyBatis-Plus
二、系统架构与服务组件
1. 服务架构图
+----------------+     +----------------+     +----------------+
|                |     |                |     |                |
|  客户端应用     |<--->|   API网关      |<--->|  用户资源服务   |
|  (前端项目)     |     |  (认证+路由)   |     | (user-service) |
|                |     |                |     |                |
+----------------+     +--------+-------+     +--------+-------+|v
+----------------+     +----------------+
|                |     |                |
|  订单资源服务   |     |  产品资源服务   |
|(order-service) |     |(product-service)|
|                |     |                |
+----------------+     +----------------+
2. 服务职责说明
服务名称职责描述
API网关统一请求入口,处理用户登录、Token生成、验证和路由分发
资源服务提供业务数据接口,依赖网关传递的Token进行权限控制
客户端应用用户交互入口,通过API调用网关服务,处理登录状态和Token存储
三、核心技术实现
1. 网关服务配置文件(application.yml)
server:port: 8080spring:application:name: api-gatewaydatasource:url: jdbc:mysql://localhost:3306/sso_db?useSSL=false&serverTimezone=Asia/Shanghaiusername: rootpassword: passworddriver-class-name: com.mysql.cj.jdbc.Driversecurity:jwt:secret: sso-jwt-secret-keyexpiration: 3600cloud:gateway:routes:- id: user-serviceuri: lb://user-servicepredicates: Path=/api/users/**filters: TokenRelay- id: order-serviceuri: lb://order-servicepredicates: Path=/api/orders/**filters: TokenRelay- id: public-apiuri: lb://gatewaypredicates: Path=/api/public/**mybatis-plus:mapper-locations: classpath*:/mapper/**/*.xmltype-aliases-package: com.example.gateway.modelconfiguration:map-underscore-to-camel-case: truelog-impl: org.apache.ibatis.logging.stdout.StdOutImplglobal-config:db-config:id-type: auto
2. 数据实体类(User.java)
@Data
@TableName("sys_user")
public class User {@TableId(type = IdType.AUTO)private Long id;private String username;private String password;private String realName;private String phone;private Date createTime;// 权限列表(实际项目中建议单独建表)private String permissions;
}
3. 数据访问层(UserMapper.java)
@Mapper
public interface UserMapper extends BaseMapper<User> {User selectByUsername(String username);
}
4. 服务层实现(UserDetailsServiceImpl.java)
@Service
public class UserDetailsServiceImpl implements UserDetailsService {@Autowiredprivate UserMapper userMapper;@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {User user = userMapper.selectByUsername(username);if (user == null) {throw new UsernameNotFoundException("用户不存在");}return new org.springframework.security.core.userdetails.User(user.getUsername(),user.getPassword(),Collections.emptyList());}
}
5. 网关安全配置(SecurityConfig.java)
@Configuration
@EnableWebSecurity
public class SecurityConfig {@Autowiredprivate JwtAuthenticationEntryPoint unauthorizedHandler;@Autowiredprivate JwtRequestFilter jwtRequestFilter;@Autowiredprivate UserDetailsService userDetailsService;@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}@Beanpublic AuthenticationManager authenticationManager(AuthenticationConfiguration authConfig) throws Exception {return authConfig.getAuthenticationManager();}@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {http.cors().and().csrf().disable().exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests().antMatchers("/api/auth/**", "/api/public/**").permitAll().anyRequest().authenticated();http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);return http.build();}
}
6. JWT工具类(JwtUtils.java)
@Component
public class JwtUtils {@Value("${spring.security.jwt.secret}")private String secret;@Value("${spring.security.jwt.expiration}")private Long expiration;public String extractUsername(String token) {return extractClaim(token, Claims::getSubject);}public Date extractExpiration(String token) {
http://www.yayakq.cn/news/205697/

相关文章:

  • 温州做美食网站麦田建设工程网站
  • 机票网站建设网站平台方案
  • 导航网站前端模板仙桃城市建设投资公司网站
  • 郓城县住房和城乡建设局网站网站整体策划与设计
  • 网站后台建设公司wordpress排版分栏
  • 建设银行网站卡死网站开发与制作工资
  • 网站如何做跳转网站内容规划
  • 网站建设销售需要哪些做电商怎么建网站
  • 海阳网站制作域名注册好了怎么登录
  • 网站建设实验目的高端建材项目
  • 做网站学cdr吗网站设计带装修网站大概收费
  • 网站一条龙服务深圳网站制作公司招聘
  • 需要注册的企业网站网页设计教程dw
  • 技术支持 东莞网站建设和佳网站建设
  • 苏州网站设计公司简介宁波网站建设内容
  • dede网站地图模板下载电脑版cad免费怎么下载
  • 替老外做网站深圳网站建设定制
  • 价值30万的网站建设即墨有做网站的吗
  • 硬件开发网站给人做网站赚钱
  • 网站图片浏览特效wordpress友情链接分类显示
  • 北京网站建设求职简历深圳全网营销平台排名
  • asp网站免费完整源码济南建手机网站公司
  • 三明交通建设集团网站在本地搭建wordpress
  • 山东网页制作网站深圳正规的保安公司
  • 设计师常用网站门户商务通代码是不是只要放在网站根目录下就可以了
  • 建站之星好吗短租网站那家做的好
  • 网站排名优化方法WordPress显示时间函数
  • 如何实现输入域名访问网站首页江西做网站的公司有哪些
  • 免费做网站公司网站类网站建设
  • 搜狐视频网站联盟怎么做网络最有效的推广方法