2

일부 필터가 추가되지 않은 것처럼 보입니다. java-config에서 Spring 보안 3.2.0.RELEASE를 사용합니다. 전체 프로젝트가 GitHub SecurityConfig.java에 게시하는 것은 여기에 있습니다 : SecurityConfig.java/j_spring_security_check HTTP 오류 404

내가에서 필터를 설정하려고 :. CSRF 후

@Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.csrf().disable() 
       .authorizeRequests() 
       .antMatchers("/app/**").hasRole("ADMIN") 
       .and() 
       .formLogin() 
       .loginPage("/") 
       .defaultSuccessUrl("/app/") 
       .failureUrl("/?error=1") 
       .permitAll() 
       .and() 
       .logout() 
       .logoutSuccessUrl("/?logout"); 
    } 

()() 해제 -하지만 문제는 해결되지 ... 나 자신의 CustomUserDetailsService와/j_spring_security_check를 사용할 수 있기 때문에이 문제를 해결하도록 도와주세요!

답변

4

나는 봄 보안 자바 구성에 경험이없는,하지만 난 당신의 코드와 API 확인하고는 로그인 처리 URL을 설정하면 사용자가 로그인 할 것으로 보인다 :

AbstractAuthenticationFilterConfigurer.loginProcessingUrl("/j_spring_security_check") 

그래서 코드가 있어야한다 :

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http.csrf().disable() 
      .authorizeRequests() 
      .antMatchers("/app/**").hasRole("ADMIN") 
      .and() 
      .formLogin() 
      .loginProcessingUrl("/j_spring_security_check") 
      .loginPage("/") 
      .defaultSuccessUrl("/app/") 
      .failureUrl("/?error=1") 
      .permitAll() 
      .and() 
      .logout() 
      .logoutSuccessUrl("/?logout"); 
} 

기본적으로 설정되어 있습니다. 이 (Spring에 의해 생성 된 프록시) 지금처럼

또한, 대신를 autowiring에의, MyCustomUserDetailsService을 사용하려면 내가 수동으로 구성합니다 : 구성 요소 주석 @

public class MyCustomUserDetailsService implements UserDetailsService { 

    private UserDAO userDAO; 

    public MyCustomUserDetailsService(UserDAO userDAO) { 
     this.userDAO = userDAO; 
    } 
    // ...  
} 

공지 사항, 아니 @ 서비스/그리고 DAO는 Ctor를 통해 주사했다. 보안 설정에서 :

@Configuration 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private DataSource dataSource; 

    @Autowired 
    private UserDAO userDAO; 

    @Override 
    protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
     auth.jdbcAuthentication() 
       .dataSource(dataSource) 
       .and() 
       .userDetailsService(new MyCustomUserDetailsService(userDAO)); 
    } 
    // ... 
} 

이제 UserDetailService가 올바르게 구성되었습니다. 그리고 응용 프로그램에 로그인하는 동안이 파일이 사용됩니다.

사용자 이름과 비밀번호가 사용되지 않은 것으로 나타났습니다. 이것은 login.jsp에서 j_username과 j_password를 사용하는 반면 username 매개 변수는 username이어야하며 password 매개 변수는 password 여야하기 때문입니다.

<input type="text" id="username" class="span4" name="username" placeholder="Username" /> 
<input type="password" id="password" class="span4" name="password" placeholder="Password" /> 

FormLoginConfigurer 클래스를 살펴보십시오.

+0

좋아,하지만 내 MyCustomUserDetailsService가 사용 중이 아닌 것처럼 보이지만 Spring UserDetailsService를 사용 중입니다. loadUserByUsername 메서드에서 Y 다음 행을 삽입합니다. System.out.println (login); 쉘에 인쇄 된 것은 아무것도 없습니다. 그리고 아무 예외도 ... –

+1

MyCustomUserDetailsService 서비스를 사용하려면 Autowire가 아니라 대신 SecurityConfig에서 수동으로 생성합니다 (어쨌든 보안 구성에만 사용됨). 나는 이것을 시각화하기 위해 원래의 답을 편집 할 것입니다. –

+0

고마워요! 새로운 질문이 있으면 연락 할 수 있습니까? 스프링 보안 문제를 해결하는 데 일주일을 잊어 버렸습니다. –