无法使用Spring Boot 2 / Spring Security 5

时间:2018-08-25 09:56:35

标签: spring-boot spring-security

作为序言,我根本没有春天的经验,无论我发现什么,仍然可能是错误的:)。

我正在尝试通过@Secured在控制器的rest方法上运行角色层次结构:

@Secured("ROLE_USER")
@JsonView(value=View.Detail.class)
@RequestMapping(path = "/{id}", method = RequestMethod.GET)
public Lamp getLamp(@PathVariable UUID id) {
    return lampService.getLampById(id);
}

我为启用此功能所做的/我尝试过的操作:

我启用了WebSecurity,并将secureEnabled设置为true

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

我还添加/尝试了不同口味的RoleHierarchy:

@Bean
public RoleHierarchyImpl roleHierarchy() {
    RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
    roleHierarchy.setHierarchy("ROLE_ADMIN > ROLE_EDITOR");
    // TODO: add ROLE_EDITOR > ROLE_USER


    return roleHierarchy;
}

试图调用/配置RoleHierarchyVoter

@Bean
public RoleHierarchyVoter roleHierarchyVoter(RoleHierarchy roleHierarchy) {
    return new RoleHierarchyVoter(roleHierarchy);
}

我还尝试了WebSecurityExpressionHandler

private SecurityExpressionHandler<FilterInvocation> webExpressionHandler() {
    DefaultWebSecurityExpressionHandler defaultWebSecurityExpressionHandler = new DefaultWebSecurityExpressionHandler();
    defaultWebSecurityExpressionHandler.setRoleHierarchy(roleHierarchy());
    return defaultWebSecurityExpressionHandler;
}

在此处进行全部配置:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().expressionHandler(webExpressionHandler())
            .antMatchers("/api/**").authenticated()
    ;
    http.httpBasic();
    http.csrf().disable();
}

现在我完全迷路了。我通过配置启用安全日志记录:

logging.level.org.springframework.security=DEBUG

在我的application.properties中,它工作正常。它向我展示了MethodSecurityInterceptor对其进行处理,而RoleVoter拒绝访问。应该有一个RoleHierarchyVoter,但是根本没有出现。我还调试了它以确保。

在spring安全参考中,也只有一个bean用于配置层次结构,但是我没有尝试过。

我确定层次结构本身可以工作,因为调试器中的对象表明ADMIN包括EDITOR,而我的测试用户也具有ADMIN角色。我进入Principal并调试了RoleVoter。

我也不明白为什么有人建议使用WebSecurityExpressionHandler。我猜想这不适用于方法安全性。

我也很烦恼为什么我的用例看起来不那么常见。人们还在做其他事情吗?

Tx!

0 个答案:

没有答案