security 自定义权限
时间: 2023-06-29 21:20:57 浏览: 65
可以使用 Spring Security 框架来实现自定义权限。首先,你需要配置一个自定义的 UserDetailsService,用于从数据库或其他数据源中获取用户信息。接下来,你可以通过实现 AccessDecisionVoter 接口来自定义投票器,用于决定用户是否有权限执行某个操作。最后,你需要将自定义的投票器添加到 Spring Security 的配置中,以生效。
下面是一个示例配置:
```
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/user/**").hasAnyRole("ADMIN", "USER")
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.logout()
.and()
.csrf().disable();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
@Bean
public AccessDecisionVoter<FilterInvocation> roleVoter() {
RoleHierarchyVoter roleHierarchyVoter = new RoleHierarchyVoter(roleHierarchy());
return roleHierarchyVoter;
}
@Bean
public RoleHierarchyImpl roleHierarchy() {
RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
roleHierarchy.setHierarchy("ROLE_ADMIN > ROLE_USER");
return roleHierarchy;
}
}
```
在这个配置中,我们使用了一个自定义的 UserDetailsService,并配置了三个 URL 的访问权限。我们还添加了一个自定义的投票器 RoleHierarchyVoter,用于支持角色继承。最后,我们将这个投票器添加到了配置中。