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

做企业网站 需要那些功能深圳小程序开发公司

做企业网站 需要那些功能,深圳小程序开发公司,网站建设没业务,湖南建设厅网站[Java实战]Spring Boot 3实现 RBAC 权限控制(二十五) 一、RBAC 权限控制简介 RBAC(Role-Based Access Control,基于角色的访问控制)是一种常见的权限管理模型,通过为用户分配角色,再为角色分配…

[Java实战]Spring Boot 3实现 RBAC 权限控制(二十五)

一、RBAC 权限控制简介

RBAC(Role-Based Access Control,基于角色的访问控制)是一种常见的权限管理模型,通过为用户分配角色,再为角色分配权限,从而实现对资源的访问控制。这种模型简化了权限管理,提高了系统的安全性和可维护性。

二、项目结构设计

在 Spring Boot 项目中实现 RBAC 权限控制,通常需要以下模块:

  • 用户模块(User):存储用户的基本信息,如用户名、密码等。
  • 角色模块(Role):定义系统中的角色,如管理员、普通用户等。
  • 权限模块(Permission):定义具体的权限,如访问特定接口、操作特定数据等。
  • 用户角色关系模块(UserRole):关联用户和角色。
  • 角色权限关系模块(RolePermission):关联角色和权限。

三、数据库设计

以下是实现 RBAC 权限控制所需的数据库表结构:

  1. 用户表(users)
    • id:用户ID
    • username:用户名
    • password:密码
  2. 角色表(roles)
    • id:角色ID
    • name:角色名称
  3. 权限表(permissions)
    • id:权限ID
    • name:权限名称
  4. 用户角色关系表(user_roles)
    • user_id:用户ID
    • role_id:角色ID
  5. 角色权限关系表(role_permissions)
    • role_id:角色ID
    • permission_id:权限ID

四、Spring Security 配置

使用 Spring Security 配置 RBAC 权限控制,需要实现以下步骤:

  1. 配置 Spring Security
    • 添加 @EnableWebSecurity 注解,启用 Spring Security 配置。
    • 配置 HttpSecurity,定义哪些请求需要认证,哪些请求需要特定角色。
    • 配置 AuthenticationManager,用于用户认证。
  2. 实现 UserDetailsService
    • 从数据库加载用户信息,包括用户名、密码和角色。
    • 为用户分配角色和权限。
  3. 配置 JWT 令牌
    • 使用 JWT 令牌进行用户认证和授权。
    • 在请求中验证 JWT 令牌,提取用户信息和角色。

五、代码实现

以下是实现 RBAC 权限控制的关键代码:

1. 安全配置类(SecurityConfig)
@Configuration
@EnableWebSecurity
public class SecurityConfig {@Autowiredprivate UserDetailsService userDetailsService;@Autowiredprivate JwtRequestFilter jwtRequestFilter;@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {http.csrf(AbstractHttpConfigurer::disable).authorizeHttpRequests(auth -> auth.requestMatchers("/api/auth/**").permitAll().requestMatchers("/api/admin/**").hasRole("ADMIN").requestMatchers("/api/user/**").hasAnyRole("USER", "ADMIN").anyRequest().authenticated()).sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS));http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);return http.build();}@Beanpublic AuthenticationManager authManager(HttpSecurity http) throws Exception {AuthenticationManagerBuilder authenticationManagerBuilder =http.getSharedObject(AuthenticationManagerBuilder.class);authenticationManagerBuilder.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());return authenticationManagerBuilder.build();}
}
2. 用户详情服务(UserDetailsService)
@Service
public class UserDetailsServiceImpl implements UserDetailsService {@Autowiredprivate UserRepository userRepository;@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {User user = userRepository.findByUsername(username).orElseThrow(() -> new UsernameNotFoundException("User not found with username: " + username));return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), getAuthorities(user));}private Collection<? extends GrantedAuthority> getAuthorities(User user) {return user.getRoles().stream().map(role -> new SimpleGrantedAuthority("ROLE_" + role.getName())).collect(Collectors.toList());}
}
3. JWT 工具类(JwtUtils)
@Component
public class JwtUtils {private String secretKey = "yourSecretKey";public String generateToken(UserDetails userDetails) {Map<String, Object> claims = new HashMap<>();return createToken(claims, userDetails.getUsername());}private String createToken(Map<String, Object> claims, String subject) {return Jwts.builder().setClaims(claims).setSubject(subject).setIssuedAt(new Date(System.currentTimeMillis())).setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 10)) // 10 hours.signWith(SignatureAlgorithm.HS256, secretKey).compact();}
}

六、测试 RBAC 权限控制

使用 Postman 测试 RBAC 权限控制:

  1. 注册用户:发送 POST 请求到 /api/auth/register,包含用户名和密码。
  2. 登录获取 JWT 令牌:发送 POST 请求到 /api/auth/login,使用用户名和密码获取 JWT 令牌。
  3. 访问受保护的接口:在请求头中添加 JWT 令牌,访问 /api/user/**/api/admin/** 接口,验证角色权限。

七、最佳实践

  1. 明确角色和权限:清晰定义角色和权限,避免权限重叠。
  2. 限制角色变更:减少角色变更频率,确保变更记录清晰。
  3. 定期审计:定期审计用户角色和权限,确保符合安全策略。

如果你在使用过程中遇到任何问题,欢迎在评论区留言交流。感谢你的阅读,希望这篇文章对你有所帮助!

http://www.dtcms.com/wzjs/459927.html

相关文章:

  • 成都网站建设的公司哪家好app推广是做什么的
  • 四川省人民政府官网东莞网站推广优化公司
  • 专业制作外贸网站的公司上海做seo的公司
  • 关于网站开发的论文文献微信怎么引流营销呢
  • 广东一站式网站建设费用seo点击排名工具有用吗
  • 重庆建筑工程网站谷歌搜索引擎 google
  • 宜昌市做网站百度近日收录查询
  • 四川网站制作成都国内做网站比较好的公司
  • 图片制作成动态视频百度首页排名优化价格
  • 温州哪家做网站seo推广方法集合
  • wordpress pointseo网站优化工具
  • 做网站卖仿品美国搜索引擎浏览器
  • 南京本地网站有哪些2022真实新闻作文400字
  • 做h5单页的网站投稿网站
  • 培训建设网站信阳seo优化
  • 电子商务网站发展建设百度怎样发布作品
  • 变更备案网站可以访问吗推广app大全
  • web用框架做网站步骤免费开源网站
  • 开发一款手机app软件需要多少钱优化技术基础
  • 政府网站建设的初衷建网站免费
  • 企业网站 域名注册企业新闻营销
  • 费县做网站2022最新小学生新闻
  • asp 网站管理系统百度seo排名软
  • 如何做产品网站网页设计浏览器打开
  • 婚纱网站手机网站关键词app下载
  • 网站怎样查是哪家做的知乎软文推广
  • php网站搭建教程下载百度app并安装
  • web网页设计是什么电商中seo是什么意思
  • 看一个网站是哪里做的铜川网站seo
  • 政府网站建设 方案秘密入口3秒自动进入