我与 spring boot/security 和 Keycloak 进行了基本集成。 当我单击受保护的资源时,我会被重定向到默认的 Keycloak 登录页面,但是当我访问应用程序上的 /login 路径时,我会被重定向到以下提示:
如您所见,仅配置了一个 OAuth2 提供程序,这使得该页面完全不切实际。
如何跳过此页面或禁用通向此页面的 /login 路径?
Spring 安全配置:
属性文件:
spring.security.oauth2.client.registration.keycloak.client-id=some-client spring.security.oauth2.client.registration.keycloak.client-secret=copied_secret spring.security.oauth2.client.registration.keycloak.authorization-grant-type=authorization_code spring.security.oauth2.client.registration.keycloak.scope=openid spring.security.oauth2.client.provider.keycloak.issuer-uri=http://localhost:8180/realms/some_realm spring.security.oauth2.client.provider.keycloak.user-name-attribute=preferred_username spring.security.oauth2.resourceserver.jwt.issuer-uri=http://localhost:8180/realms/some_realm
安全配置:
`@EnableWebSecurity
@Configuration(proxyBeanMethods = false)
public class WebSecurityConfig {
private final KeycloakLogoutHandler keycloakLogoutHandler;
WebSecurityConfig(KeycloakLogoutHandler keycloakLogoutHandler) {
this.keycloakLogoutHandler = keycloakLogoutHandler;
}
@Bean
protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());
}
@Bean
public SecurityFilterChain clientFilterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests(authorize ->
authorize.requestMatchers(
"/",
"/themes/**",
"/login")
.permitAll()
.anyRequest().authenticated()
);
http.oauth2Login(Customizer.withDefaults())
.logout(logoutCustomizer ->
logoutCustomizer.addLogoutHandler(keycloakLogoutHandler)
.logoutSuccessUrl("/"));
return http.build();
}
@Bean
public AuthenticationManager authenticationManager(HttpSecurity http) throws Exception {
return http.getSharedObject(AuthenticationManagerBuilder.class)
.build();
}
}`
我已经尝试过了
使用
formLogin().disable()
禁用页面。还尝试用接受定制器并从那里禁用它的新方法替换这个过时的方法。
创建并保护另一个路径,例如:loggedInUser 以利用跳过此页面的优势,但路径 /login 仍然存在,看起来像是未完成的工作。
您有两个选择:
/login
,而是重定向到登录页面中链接的 URI @Controller
提供您自己的 /login
并使用 302 进行响应,位置位于登录页面中链接的 URI 第一个选项允许在需要时保留默认页面。