【发布时间】:2018-12-29 14:27:45
【问题描述】:
为了简短起见,我正在尝试实现自定义 FilterInvocationSecurityMetadataSource,以便使用 spring security 5.0.6 和 Spring Boot 2.0.3 在我的 Web 应用程序中动态保护/授权某些部分/URL 端点。
问题是无论我使用什么角色,它总是给我禁止页面。
我已经尝试了几种不同角色名称的东西,并且(相信我)我已经搜索了整个互联网,甚至在 spring security 5.0.6 书籍上,但似乎没有任何效果。
这个问题可能类似这样:Spring Security issue with securing URLs dynamically
下面自定义FilterInvocationSecurityMetadataSource的相关部分
public class DbFilterInvocationSecurityMetadataSource implements FilterInvocationSecurityMetadataSource {
public Collection<ConfigAttribute> getAttributes(Object object)
throws IllegalArgumentException {
FilterInvocation fi=(FilterInvocation)object;
String url=fi.getRequestUrl();
System.out.println("URL requested: " + url);
String[] stockArr = new String[]{"ROLE_ADMIN"};
return SecurityConfig.createList(stockArr);
}
下面是securitywebconfigAdapter的自定义实现的相关部分
@Configuration
public class Security extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.withObjectPostProcessor(new ObjectPostProcessor<FilterSecurityInterceptor>() {
public <O extends FilterSecurityInterceptor> O postProcess(
O fsi) {
FilterInvocationSecurityMetadataSource newSource = new DbFilterInvocationSecurityMetadataSource();
fsi.setSecurityMetadataSource(newSource);
return fsi;
}
})
.and()
.formLogin()
.permitAll();
}
在自定义 userDetails 权限的相关部分下方。 用户在数据库中具有角色:ROLE_ADMIN。
public class CustomUserDetails extends User implements UserDetails {
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
List<String> dbRoles=new ArrayList<String>();
for (Role userRole : super.getRoles()) {
dbRoles.add(userRole.getType());
}
List<SimpleGrantedAuthority> authorities=new ArrayList<SimpleGrantedAuthority>();
for (String role : dbRoles) {
authorities.add(new SimpleGrantedAuthority(role));
}
return authorities;
}
我做错了什么??
如果需要更多代码,请在下方评论。
如果你有好书,我可以在下面学习 Spring 安全授权评论的这个动态部分。
谢谢!
【问题讨论】:
标签: authentication spring-security authorization http-status-code-403 access-denied