使用带有keycloak的spring安全注释

时间:2015-12-31 22:32:50

标签: spring spring-security keycloak pre-authentication

我只是Spring Security的初学者,但我想知道是否可以使用@PreAuthorize@PostAuthorize@Securedkeycloak-spring-security-adapter的方式配置keycloak。其他注释。 例如,我在我的简单Spring Rest webapp中配置了@RestController public class TMSRestController { @RequestMapping("/greeting") public Greeting greeting(Principal principal, @RequestParam(value="name") String name) { return new Greeting(String.format(template, name)); } ... } 和Spring Security,以便我可以访问控制器中的Principal对象,如下所示:

@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));
    }
...
}

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

ClassRules

我得到例外:

  

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

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

我需要做什么才能使这个春季安全注释有效?是否可以在此上下文中使用此注释?

2 个答案:

答案 0 :(得分:4)

您仍然需要使用Keycloak配置Spring Security。查看基于注释的配置的adapter documentation。一旦设置完成,您的Spring Security注释将适用于授权呼叫。

答案 1 :(得分:1)

下面是示例代码:

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

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

除此代码外。您需要为领域角色和客户端(应用程序角色)进行角色映射。应用程序角色将放在@PreAuthorize