[SPRING] 사용자 정의 AuthenticationProvider가 호출되지 않았습니다.
SPRING사용자 정의 AuthenticationProvider가 호출되지 않았습니다.
기본 인증 보호 REST 앱을 갖고 싶습니다. 나는 보안 작동을 위해 http://www.baeldung.com/spring-security-authentication-provider의 일반 지침을 따랐다.
AuthenticationProvider 구현을 끝내었지만 Spring에 의해 결코 호출되지 않습니다. 모든 요청에 오류가 발생합니다.
{"timestamp":1460199213227,"status":401,"error":"Unauthorized","message":"Full authentication is required to access this resource","path":"/test"}
AuthenticationProvider가 아무 것도하지 않고서도.
이 앱은 주석 기반이며 다음과 같은 관련 비트가 있습니다.
보안 설정
@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {
@Autowired
CustomAuthenticationProvider authenticationProvider;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authenticationProvider);
}
@Override
public void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authenticationProvider(authenticationProvider)
.authorizeRequests()
.anyRequest().authenticated().and().httpBasic();
}
}
AuthenticationProvider
@Component
public class CustomAuthenticationProvider implements AuthenticationProvider {
@Autowired
private UserDAO userDAO;
@Autowired
private Authenticator authenticator;
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
// This never gets called, I checked with debugger
String username = authentication.getName();
String password = authentication.getCredentials().toString();
User user = userDAO.findByUsername(username);
User authenticatedUser = authenticator.authenticate(user, password);
if (authenticatedUser == null){
throw new RESTAuthenticationException("Auth failed");
}
List<GrantedAuthority> authorityList = new ArrayList<>();
return new UsernamePasswordAuthenticationToken(user, authorityList);
}
@Override
public boolean supports(Class<?> aClass) {
return aClass.equals(UsernamePasswordAuthenticationToken.class);
}
}
제어 장치
@RestController
public class UserController {
@RequestMapping(value = "/test")
public ResponseEntity test(@AuthenticationPrincipal User user) {
return ResponseEntity.ok().body(user);
}
}
해결법
-
==============================
1.상태 코드 401의 응답을받습니다. 이것은 "인증되지 않은"http 상태 코드입니다. 요청에 누락 된 / 잘못된 형식의 인증 헤더로 인해 발생한 것일 수 있습니다.
상태 코드 401의 응답을받습니다. 이것은 "인증되지 않은"http 상태 코드입니다. 요청에 누락 된 / 잘못된 형식의 인증 헤더로 인해 발생한 것일 수 있습니다.
Http-Basic을 사용하고 있습니다. 요청에 다음 헤더가 필요합니다.
Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l
여기서 QWxhZGRpbjpPcGVuU2VzYW1l 문자열은
: base64로 인코딩 된 문자열입니다.
from https://stackoverflow.com/questions/36515895/custom-authenticationprovider-is-not-called by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] @ 값이 주입되지 않습니다. (0) | 2019.04.24 |
---|---|
[SPRING] Spring 프레임 워크에서 새로운 키워드의 역할 (0) | 2019.04.24 |
[SPRING] 주석이 달린 매개 변수로 Spring AOP advice에 인수를 전달하려면 어떻게해야합니까? (0) | 2019.04.24 |
[SPRING] NoSuchBeanDefinitionException SessionFactory 빈을 초기화하는 방법? (0) | 2019.04.24 |
[SPRING] @Configuration이 있고 클래스가없는 클래스 내부의 @Bean (0) | 2019.04.24 |