복붙노트

[SPRING] 스프링 보안 / j_spring_security_check을 찾을 수 없음 404

SPRING

스프링 보안 / j_spring_security_check을 찾을 수 없음 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[] { "/" };
    }
}

다음은 내 Security Config입니다.

@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
    }

}

그리고 이것은 login.html입니다 (예 : html from 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을 사용하지 않습니다.)

해결법

  1. ==============================

    1.스프링 4.X를 사용하고 있다면 버전 문제 일 수 있습니다.

    스프링 4.X를 사용하고 있다면 버전 문제 일 수 있습니다.

    어디에서와 같이 봄 3.X

  2. ==============================

    2.나는 이것을 만들었고 지금은 효과가있다.

    나는 이것을 만들었고 지금은 효과가있다.

    import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;
    
    public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
    
    }
    

    이것은 SpringSecurityFilterChain을 활성화합니다.

    CSRF 오류 때문에 @EnableWebSecurity에서 @EnableWebMvcSecurity로 전환해야했습니다. 봄철 문서가 쓰여지는 것처럼 :

    또한 그의 설명에 대해 M. Deinum에게 감사드립니다. Spring은 최근에 / j_spring_security_check / j_password / j_username을 / login / password / username으로 변경했습니다.

  3. ==============================

    3.또한 csrf를 비활성화 할 때이 문제에 직면했습니다. 명시 적으로 loginProcessingUrl을 지정하려고 시도했지만 완벽하게 작동했습니다!

    또한 csrf를 비활성화 할 때이 문제에 직면했습니다. 명시 적으로 loginProcessingUrl을 지정하려고 시도했지만 완벽하게 작동했습니다!

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

    주의 사항 :

    My Spring Security 버전은 4.0.3입니다.

    P / S : 내 대답은 질문과 직접적으로 관련이 없을 수도 있지만 스프링 보안에 익숙하지 않은 사람을 도와 줄 수 있다고 생각합니다.

  4. from https://stackoverflow.com/questions/27469834/spring-security-j-spring-security-check-not-found-404 by cc-by-sa and MIT license