Spring Security / J весенняя проверка безопасности не найдена 404

вот мой WebAppInitializer:

@Configuration
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] { AppConfig.class, WebSecurityConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[] { WebConfig.class };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
}

вот моя конфигурация безопасности:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/resources/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // @formatter:off
        http.authorizeRequests()
                .antMatchers("/signup", "/about").permitAll()
                .antMatchers("/admin/**").hasRole("ADMIN")
                .anyRequest().authenticated()
                .and().formLogin().loginPage("/login").defaultSuccessUrl("/home").failureUrl("/error").permitAll()
                .and().httpBasic();
        // @formatter:on
    }

}

и это мой логин.html (пример html из thymeleaf):

<form th:action="@{/j_spring_security_check}" method="post">
  <label for="j_username">Username</label>:
  <input type="text" id="j_username" name="j_username" /> <br />

  <label for="j_password">Password</label>:
  <input type="password" id="j_password" name="j_password" /> <br />

  <input type="submit" value="Log in" />
</form>

когда я нажимаю на логин, эта ошибка появляется:

HTTP ERROR 404

Problem accessing /j_spring_security_check. Reason:

    Not Found

как я могу избавиться от этой ошибки? Я много гуглил, но пока безуспешно. (Да, я не использую xml.)

3 ответов


может быть проблемой версии, если вы используете spring 4.X, то

a.) url-адрес входа = / login b) url выхода из системы = / logout

где, как в случае пружины 3.X

a.) url входа = / j_spring_security_check b) url выхода = / j_spring_security_logout


Я создал это, и теперь он работает:

import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;

public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {

}

это активирует SpringSecurityFilterChain видимо.

мне также пришлось переключиться с @EnableWebSecurity на @EnableWebMvcSecurity из-за ошибки CSRF. Как весной написано doc:

...Причина в том, что Spring Security защищает от CSRF attakcks и нет токена CSRF, включенного в наш запрос. Обновить наш конфигурация для использования @ Enablewebmvcsecurity аннотация, которая будет делать так же, как @EnableWebMvcSecurity и обеспечивают интеграцию с Весна в MVC. Среди прочего, это обеспечит наш токен CSRF включено в наши формы автоматически при использовании Thymleaf 2.1+ или Spring Taglibs в MVC...

также Спасибо М. Deinum за его комментарий. Весна недавно переключила /j_spring_security_check /j_password /j_username на /login /password / username по-видимому.


Я также столкнулся с этой проблемой при отключении csrf. Я попытался указать loginProcessingUrl явно, и это сработало отлично!

@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
   httpSecurity.csrf().disable();
   httpSecurity.formLogin().loginProcessingUrl("/login-url");
}

Пожалуйста, обратите внимание, что:

  1. этот url позволяет только HTTP POST метод.
  2. другие важные URL-адреса по умолчанию в Spring Security are: 1. /login: возврат формы входа по умолчанию 2. /logout

мой Spring Security версия 4.0.3.Отпустите

P/S: мой ответ не может быть связан непосредственно с вопрос, но я думаю, что это может помочь кому-то, кто новичок в Spring Security как я