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

安徽网站排名优化公司网站评论怎么做的

安徽网站排名优化公司,网站评论怎么做的,商城网站开发费用,专业的设计网站建设Spring Security 的权限控制是通过 SecurityContextHolder 中保存的认证信息&#xff08;Authentication&#xff09;进行的。权限信息来自 UserDetails 的 getAuthorities() 方法。 只要保证返回的 Collection<? extends GrantedAuthority> 包含 ROLE_xxx&#xff0c;…

Spring Security 的权限控制是通过 SecurityContextHolder 中保存的认证信息(Authentication)进行的。权限信息来自 UserDetails 的 getAuthorities() 方法。

只要保证返回的 Collection<? extends GrantedAuthority> 包含 ROLE_xxx,就可以进行角色控制。

数据库设计

CREATE TABLE t_user (id INT PRIMARY KEY AUTO_INCREMENT,login_act VARCHAR(50),login_pwd VARCHAR(100),name VARCHAR(50),...
);CREATE TABLE t_role (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),        -- 角色名,例如 ADMIN、USERrole_key VARCHAR(50)     -- 用于权限控制,例如 ROLE_ADMIN、ROLE_USER
);CREATE TABLE t_user_role (user_id INT,role_id INT,PRIMARY KEY (user_id, role_id)
);

对应实体类如下:

@Data
@TableName("t_user")
public class TUser {private Integer id;private String loginAct;private String loginPwd;private String name;// 不加 roles 字段到数据库映射,但需要接收它@TableField(exist = false)private List<TRole> roles;
}@Data
@TableName("t_role")
public class TRole {private Integer id;private String name;private String roleKey; // 例如 ROLE_ADMIN
}

Mapper

@Mapper
public interface TUserMapper extends BaseMapper<TUser> {TUser findByLoginAct(String loginAct);
}@Mapper
public interface TRoleMapper extends BaseMapper<TRole> {@Select("SELECT r.* FROM t_role r JOIN t_user_role ur ON r.id = ur.role_id WHERE ur.user_id = #{userId}")List<TRole> selectByUserId(@Param("userId") Integer userId);
}

LoginUser 实现 UserDetails

ok 封装这里在我上一篇博客说了,你想获得登录用户的信息就得去实现UserDetails接口,所以不多赘述了

public class LoginUser implements UserDetails {private final TUser user;public LoginUser(TUser user) {this.user = user;}@Overridepublic Collection<? extends GrantedAuthority> getAuthorities() {return user.getRoles().stream().map(role -> new SimpleGrantedAuthority(role.getRoleKey())).collect(Collectors.toList());}@Override public String getPassword() { return user.getLoginPwd(); }@Override public String getUsername() { return user.getLoginAct(); }@Override public boolean isAccountNonExpired() { return user.getAccountNoExpired() == 1; }@Override public boolean isAccountNonLocked() { return user.getAccountNoLocked() == 1; }@Override public boolean isCredentialsNonExpired() { return user.getCredentialsNoExpired() == 1; }@Override public boolean isEnabled() { return user.getAccountEnabled() == 1; }public TUser getUser() { return user; }
}

实现 UserDetailsService

依旧在我上一篇博客说了,Spring Security就是通过UserDetailService的loadUserByUsername方法来获取用户登录信息的,只不过这里我们相比于上一篇博客额外set了一下roles这个属性

@Service
public class UserDetailsServiceImpl implements UserDetailsService {@Autowired private TUserMapper userMapper;@Autowired private TRoleMapper roleMapper;@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {TUser user = userMapper.findByLoginAct(username);if (user == null) throw new UsernameNotFoundException("用户不存在");List<TRole> roles = roleMapper.selectByUserId(user.getId());user.setRoles(roles);return new LoginUser(user);}
}

controller

你数据库中 role_key 是 ROLE_ADMIN,Spring Security 会自动把 hasRole(“ADMIN”) 转为 hasAuthority(“ROLE_ADMIN”) 匹配权限。所以你只需要:

数据库中角色字段保存如 ROLE_ADMIN

LoginUser 中返回 SimpleGrantedAuthority(“ROLE_ADMIN”)

就可以和controller层的注释 @PreAuthorize(“hasRole(‘ADMIN’)”)匹配上了

@RestController
public class UserController {@PreAuthorize("hasRole('ADMIN')")@GetMapping("/admin/dashboard")public String admin() {return "管理员页面";}@GetMapping("/me")public String me(@AuthenticationPrincipal LoginUser user) {return "当前用户:" + user.getUser().getName();}
}

安全配置类别SecurityConfig

别忘了配置这个类

@Configuration
@EnableMethodSecurity
public class SecurityConfig {@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {return http.csrf(AbstractHttpConfigurer::disable).authorizeHttpRequests(auth -> auth.requestMatchers("/admin/**").hasRole("ADMIN").anyRequest().authenticated()).formLogin(Customizer.withDefaults()).build();}@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}
}
http://www.yayakq.cn/news/56851/

相关文章:

  • 网站建设制作与运营清洁公司
  • 腾讯网页版qq登录入口多产品的网站怎么做seo
  • 关于网站建设的工作计划免费建设小说网站
  • 自己的网站怎么创建wordpress会员付费系统
  • 化妆品网站优势网站建设常用的工具
  • 网站编程器网站出现500
  • 企业网站建设收费标准博物馆布展设计公司排名
  • 网站快速收录教程哈尔滨模板网站
  • 电商网站 编程语言百度的广告怎么免费发布
  • 佛山网站建设公司哪家便宜和佳网站建设
  • 深圳建站公司网站洛阳制作网站的公司
  • 青岛网站排名提升wordpress文章404错误
  • 餐饮 网站 模板波兰网站后缀
  • 做新的网站seoqq钓鱼网站制作
  • 做网站威海浙江通管局 网站备案如何好注销
  • 厦门微信网站建数码电子产品网站名称
  • 学校网站功能优品惠网站建设需求
  • 安丘做网站的青岛seo整站优化哪家专业
  • 汝阳网站建设哪家好集团网站制作方案ppt
  • 湖南省做网站的google关键词seo
  • 爱站小工具计算器wordpress文章加密
  • 营销型网站主页定制html简单百度网页代码
  • 动漫网站建设策划书程序员帮忙做放贷网站
  • 网站建设的er图怎么画wordpress固定链接html
  • 做网站要需要多少钱wordpress单页展示主题
  • 福步外贸网潍坊百度网站优化
  • 网站设计费用多少游戏网站用户建设需求
  • 电商网站建设与运营方向就业前景企业网站建设费记什么科目
  • 化州市住房和建设局网站wordpress3.9主题
  • wordpress购物网站教程alisql wordpress