首页 > 解决方案 > 为什么我的弹簧控制器没有被调用?

问题描述

我正在尝试使用 Spring 5 针对 OpenId Connect 身份验证提供程序配置身份验证。

这是我的 configure() 方法:

package my.pkg.security.spring.oidc;
...
@Configuration
@ComponentScan
@EnableWebSecurity
@PropertySource("classpath:application-spring-oidc.properties")
public class OidcSecurityConfig extends WebSecurityConfigurerAdapter {

    ...
    
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/oauth_login").permitAll()
            .anyRequest().authenticated()
            .and()
            .oauth2Login()
            .clientRegistrationRepository(clientRegistrationRepository())
            .authorizedClientService(authorizedClientService())
            .loginPage("/oauth_login")
            .defaultSuccessUrl("/loginSuccess")
            .failureUrl("/loginFailure")
            .authorizationEndpoint()
            .baseUri("/oauth2/authorize-client")
            .authorizationRequestRepository(authorizationRequestRepository())
            .and()
            .tokenEndpoint()
            .accessTokenResponseClient(accessTokenResponseClient())
            .and()
            .redirectionEndpoint()
            .baseUri("/oauth2/redirect");
    }
...
}

我的控制器:

package my.pkg.security.spring.oidc;
...
@Controller
public class LoginController {
    
    @GetMapping(value = "/oauth_login")
    public String getLoginPage(Model model) {
        
        ...
    }
}

我的应用程序上下文.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans 
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:security="http://www.springframework.org/schema/security" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/security
        http://www.springframework.org/schema/security/spring-security.xsd">

    <!-- context:component-scan base-package="org.keycloak.adapters.springsecurity" / -->
    
    <context:annotation-config/>
    <bean class="my.pkg.security.spring.oidc.OidcSecurityConfig"/>
    
</beans>

当我尝试访问应用程序的受保护资源时,请求会按预期重定向到 /oauth_login。但是,当这种情况发生时,我得到一个 HTTP 404。似乎我的控制器映射被忽略了。

你能看出我的配置有什么问题吗?

标签: springcontroller

解决方案


推荐阅读