10

我只是 Spring Security 的初学者,但我想知道是否可以以我可以使用 、 和其他注释的方式@PreAuthorize配置@PostAuthorizekeycloak @Secured。例如,我keycloak-spring-security-adapter在我的简单 Spring Rest webapp 中配置了 Spring Security,以便我可以访问控制器中的 Principal 对象,如下所示:

@RestController
public class TMSRestController {

     @RequestMapping("/greeting")
     public Greeting greeting(Principal principal, @RequestParam(value="name") String name) {
        return new Greeting(String.format(template, name));
     }
...
}

但是当我尝试这个时(只是一个例子,实际上我想在授权之前执行自定义 EL 表达式):

@RestController
public class TMSRestController {

    @RequestMapping("/greeting")
    @PreAuthorize("hasRole('ADMIN')")
    public Greeting greeting(Principal principal, @RequestParam(value="name") String name) {
        return new Greeting(String.format(template, name));
    }
...
}

我得到例外:

org.springframework.security.authentication.AuthenticationCredentialsNotFoundException:在 SecurityContext 中找不到 Authentication 对象

在我的 spring 安全配置中,我启用了全局方法安全性:

我需要什么才能使这个 Spring 安全注释起作用?是否可以在这种情况下使用此注释?

4

2 回答 2

4

您仍然必须使用 Keycloak 配置 Spring Security。查看适配器文档以了解基于注释的配置。设置好之后,您的 Spring Security 注释将适用于授权调用。

于 2016-01-14T21:28:04.510 回答
3

这是示例代码:

@EnableWebSecurity
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true,
                        securedEnabled = true,
                        jsr250Enabled = true)
@ComponentScan(basePackageClasses = KeycloakSecurityComponents.class)
public class WebSecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
 }

@PreAuthorize("hasRole('ROLE_ADMIN')")

除了这段代码。您需要为领域角色和客户端(应用程序角色)进行角色映射。应用程序角色将被放入@PreAuthorize

于 2018-08-03T11:35:21.693 回答