[SPRING] 봄 보안 사용자 정의 AuthenticationException 메시지
SPRING봄 보안 사용자 정의 AuthenticationException 메시지
안녕 내가 봄 보안 로그인 양식에 새로운 예외를 추가 할 필요가 완벽하게 모든 것을 제외하고 나는 내 자신의 오류 메시지 (지금까지 "잘못된 로그인 / 비밀 번호"하나)를 표시하고 싶지.
사용자 이름 암호 인증 필터에서 기본 시도 인증 방법을 다시 정의했습니다.
@Override
public Authentication attemptAuthentication(final HttpServletRequest request, final HttpServletResponse response)
{
if (!myTest()) {
throw new CustomAuthenticationException("custom message");
}
}
내 예외 :
public class CustomAuthenticationException extends AuthenticationException {
public CustomAuthenticationException(final String message)
{
super(message);
}
public CustomAuthenticationException(final String message, final Throwable cause)
{
super(message, cause);
}
}
내 컨트롤러에서 내 예외를 SPRING_SECURITY_LAST_EXCEPTION에서 볼 수 있지만 오류 메시지는 항상 나쁜 자격 증명에서 하나, 어떻게 변경할 수 있습니까?
고맙습니다
해결법
-
==============================
1.LOCALIZING SPRING SECURITY MESSAGE를 시도해야합니다. 이 줄을 ApplicationContext.xml 파일에 추가해보십시오. 나머지 봄 보안 콩은 어디 있습니다.
LOCALIZING SPRING SECURITY MESSAGE를 시도해야합니다. 이 줄을 ApplicationContext.xml 파일에 추가해보십시오. 나머지 봄 보안 콩은 어디 있습니다.
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename" value="yourFolder/myMessages"/> </bean>
가 저장된 스프링 기본 클래스를 찾아야합니다. myMessage 파일을 동일한 KEY 및 현지화 된 메시지로 사용하십시오. 귀하의 의견을 바탕으로, 귀하의 프로젝트에 messages.properties 있습니다. 따라서이 속성 파일 내에있는 각 키에 대해 메시지를 가지고 완전히 현지화 된 메시지를 갖기 만하면됩니다. AbstractAccessDecisionManager.accessDenied= your message in any language AbstractSecurityInterceptor.authenticationNotFound= AbstractUserDetailsAuthenticationProvider.badCredentials= AbstractUserDetailsAuthenticationProvider.credentialsExpired= AbstractUserDetailsAuthenticationProvider.disabled= AbstractUserDetailsAuthenticationProvider.expired= AbstractUserDetailsAuthenticationProvider.locked= AbstractUserDetailsAuthenticationProvider.onlySupports= AccountStatusUserDetailsChecker.credentialsExpired= AccountStatusUserDetailsChecker.disabled= AccountStatusUserDetailsChecker.expired= AccountStatusUserDetailsChecker.locked= AclEntryAfterInvocationProvider.noPermission= AnonymousAuthenticationProvider.incorrectKey= BindAuthenticator.badCredentials= BindAuthenticator.emptyPassword= CasAuthenticationProvider.incorrectKey= CasAuthenticationProvider.noServiceTicket= ConcurrentSessionControlStrategy.exceededAllowed= DigestAuthenticationFilter.incorrectRealm= DigestAuthenticationFilter.incorrectResponse= DigestAuthenticationFilter.missingAuth= DigestAuthenticationFilter.missingMandatory= DigestAuthenticationFilter.nonceCompromised= DigestAuthenticationFilter.nonceEncoding= DigestAuthenticationFilter.nonceExpired= DigestAuthenticationFilter.nonceNotNumeric= DigestAuthenticationFilter.nonceNotTwoTokens= DigestAuthenticationFilter.usernameNotFound= JdbcDaoImpl.noAuthority= JdbcDaoImpl.notFound= LdapAuthenticationProvider.badCredentials= LdapAuthenticationProvider.credentialsExpired= LdapAuthenticationProvider.disabled= LdapAuthenticationProvider.expired= LdapAuthenticationProvider.locked= LdapAuthenticationProvider.emptyUsername= LdapAuthenticationProvider.onlySupports= PasswordComparisonAuthenticator.badCredentials= PersistentTokenBasedRememberMeServices.cookieStolen= ProviderManager.providerNotFound= RememberMeAuthenticationProvider.incorrectKey= RunAsImplAuthenticationProvider.incorrectKey= SubjectDnX509PrincipalExtractor.noMatching= SwitchUserFilter.noCurrentUser= SwitchUserFilter.noOriginalAuthentication=
-
==============================
2.messages.properties (또는 이름을 지정한 이름)에 다음과 같은 행을 추가하십시오.
messages.properties (또는 이름을 지정한 이름)에 다음과 같은 행을 추가하십시오.
AbstractUserDetailsAuthenticationProvider.badCredentials=The credentials you supplied are invalid.
사용자 정의 AuthenticationException은 필요하지 않습니다.
-
==============================
3.loginMessage.properties와 같은 클래스 경로에 특성 파일을 작성하십시오.
loginMessage.properties와 같은 클래스 경로에 특성 파일을 작성하십시오.
해당 특성 파일에서 다음을 지정하십시오.
AbstractUserDetailsAuthenticationProvider.badCredentials = 사용자 이름 / 암호를 잘못 입력했습니다.
applicationContext.xml에 다음 bean을 추가하십시오.
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basenames"> <list> <value>loginMessage</value> </list> </property> </bean>
그 후에, Username / Password와 같은 메시지가 잘못 입력됩니다. 잘못된 자격 증명 대신
-
==============================
4.매우 간단한 방법은 다음과 같이 예외 처리기 (@ControllerAdvice)에서 사용자 지정 메시지를 정의하는 것입니다.
매우 간단한 방법은 다음과 같이 예외 처리기 (@ControllerAdvice)에서 사용자 지정 메시지를 정의하는 것입니다.
@ResponseStatus(HttpStatus.UNAUTHORIZED) @ResponseBody @ExceptionHandler(value = AuthenticationException.class) public ResponseModal handleAuthenticationExceptions(AuthenticationException ex, HttpServletResponse response) { LOGGER.info("Authentication Exception: {}", ex.getMessage()); response.addCookie(new Cookie(JWTConfigurer.JWT_TOKEN_COOKIE, null)); return new ResponseModal(HttpStatus.UNAUTHORIZED.value(), "whatever you want"); }
from https://stackoverflow.com/questions/16759264/spring-security-custom-authenticationexception-message by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Post 요청에 @Requestparam 주석을 사용할 수 있습니까? (0) | 2019.03.23 |
---|---|
[SPRING] Spring batch 여러 단계를 병렬로 파티션하기? (0) | 2019.03.23 |
[SPRING] 다른 DAO에서 하나의 DAO를 호출합니까? (0) | 2019.03.23 |
[SPRING] 스프링 보안 자바 설정 (0) | 2019.03.23 |
[SPRING] angularjs + 봄 mvc + json 게시물 요청 (0) | 2019.03.23 |