Java Spring安全拦截不起作用

Java Spring安全拦截不起作用,java,spring-mvc,spring-security,Java,Spring Mvc,Spring Security,我正通过java配置开始使用spring安全性,但当我转到时,我并没有像我们预期的那样重定向到登录表单 我有基本的配置,我一直在遵循 我使用的是SpringSecurity3.2.5.RELEASE和SpringVersion4.1.2.RELEASE 这是我的安全配置: @Configuration @EnableWebMvcSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Ove

我正通过java配置开始使用spring安全性,但当我转到时,我并没有像我们预期的那样重定向到登录表单

我有基本的配置,我一直在遵循

我使用的是SpringSecurity3.2.5.RELEASE和SpringVersion4.1.2.RELEASE

这是我的安全配置:

@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
        .authorizeRequests()
            .anyRequest().authenticated()
            .and()
        .formLogin()
            .loginPage("/login")
            .permitAll();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()
                .withUser("user").password("password").roles("USER").and()
                .withUser("admin").password("password").roles("USER", "ADMIN");
    }
}
和我的安全初始值设定项:

public class SecurityInitializer extends AbstractSecurityWebApplicationInitializer {



}
我的Spring Servlet调度器:

<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

appServlet
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
/WEB-INF/spring/appServlet/servlet-context.xml
1.
appServlet
/

您的问题似乎在于未创建
springSecurityFilterChain
,因为未扫描您的
SecurityConfig

很多事情都可能是原因

  • 您的web容器不支持web应用程序3.0(仅支持Jetty 8.x)
  • 您没有
    @ComponentScan
    来覆盖
    SecurityConfig
    ,这样它就可以注册过滤bean
    springSecurityFilterChain
  • 您必须在
    SecurityInitializer
    中显式注册
    SecurityConfig
    类,并确保正在调用SecurityInitializer

    public class SecurityInitializer extends AbstractSecurityWebApplicationInitializer {
    
        public SecurityInitializer() {
            super(SecurityConfig.class);
        }
    
    }
    

    您正在使用的web服务器是什么?你也在使用Spring Web MVC吗?我正在通过gradle使用jetty,是的,我也在使用Spring Web MVC。请显示你的Spring Web MVC DispatcherServlet registeringWhat是你的Web.xml Web应用版本中的否。它一定是3.0我尝试了两种解决方案,但都不起作用。如果我使用的是spring,为什么我必须放置该构造函数(
    SecurityInitializer
    )?请参阅注释。要使AbstractSecurityWebApplicationInitializer正常工作,您需要有Web.xml版本3.0,请确保您有。我有:
    好的,您是否有404/登录名未找到?或任何其他错误?我在
    /login
    上有一个自定义的登录页面,我可以正常获得该页面。