2015-02-24 152 views
3

我开始使用java配置的spring安全性,但当我去http://localhost:8080/myapp时,我没有重定向到登录表单,正如我们所预期的那样。Spring Security拦截不起作用

我有基本的配置,我一直在关注this guide

我正在使用Spring Security 3.2.5.RELEASE和Spring版本4.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 { 



} 

我的春天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> 
+0

什么是您使用的网络服务器?你是否也在使用Spring Web MVC? – shazin 2015-02-24 01:18:59

+0

我通过gradle使用了jetty,是的,我也使用Spring Web MVC。 – Vercryger 2015-02-24 01:29:25

+0

请为您的Spring Web MVC DispatcherServlet注册显示代码 – shazin 2015-02-24 01:38:08

回答

0

看起来像你的情况的问题是, springSecurityFilterChain没有被创建,因为你的SecurityConfig没有被创建扫描。

很多事情可能是这个原因;

  1. Web容器不支持Web应用程序3.0(只有码头8.x的支持)
  2. 你没有@ComponentScan覆盖SecurityConfig,以便它可以注册过滤豆springSecurityFilterChain

你必须要么在SecurityInitializer中明确注册SecurityConfig类,并确保正在调用SecurityInitializer。

public class SecurityInitializer extends AbstractSecurityWebApplicationInitializer { 

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

} 
+0

我尝试了两种解决方案,但都没有工作。 为什么如果我使用弹簧,我应该把这个构造函数('SecurityInitializer')? – Vercryger 2015-02-24 02:12:30

+0

请参阅评论。要使AbstractSecurityWebApplicationInitializer正常工作,您需要具有Web.xml版本3.0,请确保您拥有该版本。 – shazin 2015-02-24 02:20:26

+0

我拥有它:' ' – Vercryger 2015-02-24 02:25:48