将 spring 安全注释与 keycloak 一起使用
Using spring security annotations with keycloak
我只是 Spring 安全方面的初学者,但我想知道是否可以以我可以使用的方式配置 keycloak @PreAuthorize
、@PostAuthorize
、 @Secured
和其他注释。
例如,我在简单的 Spring Rest webapp 中配置了 keycloak-spring-security-adapter
和 Spring 安全性,这样我就可以访问控制器中的 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: An Authentication object was not found in the SecurityContext
在我的 spring 安全配置中,我启用了全局方法安全性:
我需要什么才能使这个 spring 安全注释起作用?是否可以在此上下文中使用此注释?
您仍然需要使用 Keycloak 配置 Spring 安全性。查看基于注释的配置的 adapter documentation。设置完成后,您的 Spring 安全注释将适用于授权调用。
这里是示例代码:
@EnableWebSecurity
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true,
securedEnabled = true,
jsr250Enabled = true)
@ComponentScan(basePackageClasses = KeycloakSecurityComponents.class)
public class WebSecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
}
和
@PreAuthorize("hasRole('ROLE_ADMIN')")
除此代码外。您需要为领域角色和客户端(应用程序角色)进行角色映射。应用程序角色将放在@PreAuthorize
我只是 Spring 安全方面的初学者,但我想知道是否可以以我可以使用的方式配置 keycloak @PreAuthorize
、@PostAuthorize
、 @Secured
和其他注释。
例如,我在简单的 Spring Rest webapp 中配置了 keycloak-spring-security-adapter
和 Spring 安全性,这样我就可以访问控制器中的 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: An Authentication object was not found in the SecurityContext
在我的 spring 安全配置中,我启用了全局方法安全性:
我需要什么才能使这个 spring 安全注释起作用?是否可以在此上下文中使用此注释?
您仍然需要使用 Keycloak 配置 Spring 安全性。查看基于注释的配置的 adapter documentation。设置完成后,您的 Spring 安全注释将适用于授权调用。
这里是示例代码:
@EnableWebSecurity
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true,
securedEnabled = true,
jsr250Enabled = true)
@ComponentScan(basePackageClasses = KeycloakSecurityComponents.class)
public class WebSecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
}
和
@PreAuthorize("hasRole('ROLE_ADMIN')")
除此代码外。您需要为领域角色和客户端(应用程序角色)进行角色映射。应用程序角色将放在@PreAuthorize