나는 봄 보안 자바 구성에 경험이없는,하지만 난 당신의 코드와 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 클래스를 살펴보십시오.
좋아,하지만 내 MyCustomUserDetailsService가 사용 중이 아닌 것처럼 보이지만 Spring UserDetailsService를 사용 중입니다. loadUserByUsername 메서드에서 Y 다음 행을 삽입합니다. System.out.println (login); 쉘에 인쇄 된 것은 아무것도 없습니다. 그리고 아무 예외도 ... –
MyCustomUserDetailsService 서비스를 사용하려면 Autowire가 아니라 대신 SecurityConfig에서 수동으로 생성합니다 (어쨌든 보안 구성에만 사용됨). 나는 이것을 시각화하기 위해 원래의 답을 편집 할 것입니다. –
고마워요! 새로운 질문이 있으면 연락 할 수 있습니까? 스프링 보안 문제를 해결하는 데 일주일을 잊어 버렸습니다. –