저는 스프링 보안을 사용하여 응용 프로그램을 작성하고 있습니다. 사용자 정의 UserDetails, UserDetailsService, AccessDecisionVoter 및 WebSecurityConfigurerAdapter를 구현했습니다. 인증되지 않은 사용자가 /authenthication/login
페이지에 액세스하여 로그인하도록 허용하려고하지만, 페이지에 대한 모든 다른 액세스가 사용자 정의 AccessDecisionVoter에 의해 처리되어야합니다.
내 사용자 정의 WebSecurityConfigurerAdapter 클래스는 다음과 같습니다 : 내 데이터베이스에 여러 역할을 정의스프링 보안 : 인증 페이지 permitAll이 무시 된 것 같습니다.
@Configuration
@EnableWebSecurity
@ComponentScan(value = "security")
public class Configuration extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsServiceImpl userDetailsServiceImpl;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/authentication/login**")
.permitAll()
.and()
.authorizeRequests()
.anyRequest()
.authenticated()
.accessDecisionManager(accessDecisionManager())
;
}
@Bean
public AccessDecisionManager accessDecisionManager() {
List<AccessDecisionVoter<? extends Object>> decisionVoters =
Arrays.asList(new AccessDecisionVoterImpl());
return new UnanimousBased(decisionVoters);
}
@Override
protected void configure(AuthenticationManagerBuilder auth) {
try {
auth.userDetailsService(userDetailsServiceImpl);
} catch (Exception e) {
e.printStackTrace();
}
}
@Bean
public UserDetailsServiceImpl userDetailsService() {
return userDetailsServiceImpl;
}
}
. 내 사용자 지정 AccessDecisionVoter의 vote
메서드는 로그인되어 있고 URL + httpMethod를 기반으로 액세스를 허용하거나 거부하는 사용자의 사용 권한을 검색합니다.
문제 :
나는 사용자 이름과 암호로/인증/로그인에 POST를 보낼 때 내 코드는 나에게 정의의 AccessDecisionVoter에서 NullPointerException이 제공 다음 초래 authentication.getPrincipal();
반환 anonymousUser 통해 검색 사용자 이름 (, 나중에 코드에서 NullPointer.하지만 구성 파일이 Spring에게 permittAll 액세스/인증/로그인에 대해 알려준 이후로 어쨌든 vote
메서드가 호출되는 이유를 모르겠다.
감사합니다. 이것은 실제로 내 문제를 해결했습니다. 하지만 다른 .. 노출 – Matthias