企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 第一步 ~~~ @Service("userDetailsService") public class MyUserDetailsService implements UserDetailsService { @Autowired private UsersMapper usersMapper; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); String password = passwordEncoder.encode("aaa");//加密密码 //使用userMapper方法,使用用户名查询数据库 QueryWrapper<Users> wrapper = new QueryWrapper<>();//查询构造器 wrapper.eq("username",username);//条件 Users users= usersMapper.selectOne(wrapper);//查询一条数据 if (users==null){//用户不存在 throw new UsernameNotFoundException("用户不存在"); } List<GrantedAuthority> auths = AuthorityUtils.commaSeparatedStringToAuthorityList("admin");//权限集合 return new User(users.getUsername(),password,auths);//用户名,密码,权限 } } ~~~ # 第二步 ~~~ .antMatchers("/edu").hasAuthority("admin") ~~~ ~~~ //第二种 @Configuration public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Autowired private UserDetailsService userDetailsService; @Override public void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService)//自定义设置类 .passwordEncoder(password()); } @Bean //加密方式 public PasswordEncoder password(){ return new BCryptPasswordEncoder(); } @Override public void configure(HttpSecurity http) throws Exception { http.formLogin()//设置自定义的登录页面 .loginPage("/login.html")//登录页面设置 .loginProcessingUrl("/user/login")//登录访问的路径Security 的 .defaultSuccessUrl("/edu").permitAll() //登录成功,跳转路径 .and().authorizeRequests()//设置被保护的路径 .antMatchers("/").permitAll()//设置不需要验证的路径 //表示当前用户只有admin权限才可以访问这个路径 .antMatchers("/edu").hasAuthority("admin") .anyRequest().authenticated()//设置所有路径都可以访问 .and().csrf().disable();//关闭csrf防护 } } ~~~ `注意: 这个针对某个角色时 设置多个角色时需要多个角色同时有才行` # hasAnyAuthority 针对某一个权限有一个角色就行 ~~~ .antMatchers("/edu").hasAnyAuthority("admin,mesage") ~~~ # hasRole 会在角色前加ROLE_ ~~~ .antMatchers("/edu").hasRole("admin") ~~~ # hasAanRole 多个角色会在角色前加ROLE_ .antMatchers("/edu").hasAndRole("admin,msg")