Programing/Spring Security

spring boot security login error message 한글 설정

리커니 2019. 12. 6.
반응형

 

spring boot security login error message 한글 설정

 

 

spring boot 프로젝트에 spring security 적용방법은 아래의 link를 참고하세요.

 

 

 

link : https://aljjabaegi.tistory.com/507

 

springboot 2.x + spring security mariadb login 구현 WebSecurityConfigurerAdapter, configAuthentication 사용

springboot 2.x + spring security mariadb login 구현 WebSecurityConfigurerAdapter, configAuthentication 사용 최대한 간단한 방법으로 springboot 2.x 프로젝트에 spring security 를 적용해보겠습니다. spri..

aljjabaegi.tistory.com

 

link : https://aljjabaegi.tistory.com/508

 

springboot 2.x spring security 중복로그인 방지, logout 시 session 삭제 안될때 처리

springboot 2.x spring security 중복로그인 방지, logout 시 session 삭제 안될때 처리 기본적인 로그인 처리 방법에 대해서는 아래의 link를 참고하세요. link : springboot 2.x + spring security mariadb logi..

aljjabaegi.tistory.com

 

기본적인 순서는 아래와 같습니다. 

 

1. security-message.properties 생성

2. spring-security-core 에 있는 한글 메시지 정보를 위에 생성한 파일에 추가

3. message 설정 파일 생성

4. 로그인 페이지에서 해당 메시지 출력

 

그럼 진행해보도록 하죠.

 

1. security-message.properties 생성

 

security-message.properties 파일을 아래의 경로에 맞게 생성합니다.

 

 

2. spring-security-core 에 있는 한글 메시지 정보를 위에 생성한 파일에 추가

 

Dependencies 에 추가된 spring-security-core.jar 파일에 한글 메시지 정보를 확인해 1 에서 생성한 파일로 옮겨줍니다.

 

[경로]

 

[내용]

AbstractAccessDecisionManager.accessDenied = 접근이 거부되었습니다.
AbstractLdapAuthenticationProvider.emptyPassword = 비밀번호가 맞지 않습니다.
AbstractSecurityInterceptor.authenticationNotFound = SecurityContext에서 Authentication 객체를 찾을 수 없습니다.
AbstractUserDetailsAuthenticationProvider.badCredentials = 자격 증명에 실패하였습니다.
AbstractUserDetailsAuthenticationProvider.credentialsExpired = 자격 증명 유효 기간이 만료되었습니다.
AbstractUserDetailsAuthenticationProvider.disabled = 유효하지 않은 사용자입니다.
AbstractUserDetailsAuthenticationProvider.expired = 사용자 계정의 유효 기간이 만료 되었습니다.
AbstractUserDetailsAuthenticationProvider.locked = 사용자 계정이 잠겨 있습니다.
AbstractUserDetailsAuthenticationProvider.onlySupports = UsernamePasswordAuthenticationToken만 지원합니다.
AccountStatusUserDetailsChecker.credentialsExpired = 자격 증명 유효 기간이 만료되었습니다.
AccountStatusUserDetailsChecker.disabled = 유효하지 않은 사용자입니다.
AccountStatusUserDetailsChecker.expired = 사용자 계정의 유효 기간이 만료 되었습니다.
AccountStatusUserDetailsChecker.locked = 사용자 계정이 잠겨 있습니다.
AclEntryAfterInvocationProvider.noPermission = domain object {1}에 대한 권한이 Authentication {0}에 없습니다.
AnonymousAuthenticationProvider.incorrectKey = 제공된 AnonymousAuthenticationToken에는 필요로하는 key가 없습니다.
BindAuthenticator.badCredentials = 자격 증명에 실패하였습니다.
BindAuthenticator.emptyPassword = 비밀번호 항목이 비어 있습니다.
CasAuthenticationProvider.incorrectKey = 제공된 CasAuthenticationToken에는 필요로 하는 key가 없습니다.
CasAuthenticationProvider.noServiceTicket = 검증을 위한 CAS 서비스 티켓을 제공할 수 없습니다.
ConcurrentSessionControlAuthenticationStrategy.exceededAllowed = 최대 세션 허용 수 {0}개를 초과하였습니다.
DigestAuthenticationFilter.incorrectRealm = 응답 realm 이름 {0}과 시스템 realm 이름 {1}이 일치하지 않습니다.
DigestAuthenticationFilter.incorrectResponse = 응답이 정확하지 않습니다.
DigestAuthenticationFilter.missingAuth = 'auth' QOP(quality of protection)를 위한 digest 값은 필수 항목입니다. 현재 header 값은 {0}입니다.
DigestAuthenticationFilter.missingMandatory = digest 값은 필수 항목입니다. 현재 header 값은 {0}입니다.
DigestAuthenticationFilter.nonceCompromised = Nonce 토큰이 손상되었습니다. 현재 nonce 값은 {0}입니다.
DigestAuthenticationFilter.nonceEncoding = Nonce 값이 Base64로 인코딩 되어있지 않습니다. 현재 nonce 값은 {0}입니다.
DigestAuthenticationFilter.nonceExpired = Nonce의 유효 기간이 만료되었거나 시간이 초과되었습니다.
DigestAuthenticationFilter.nonceNotNumeric = Nonce 토큰의 첫 글자는 숫자로 시작해야 합니다. 현재 nonce 값은 {0}입니다.
DigestAuthenticationFilter.nonceNotTwoTokens = Nonce는 두 개의 토큰을 만들어야 합니다. 현재 nonce 값은 {0}입니다.
DigestAuthenticationFilter.usernameNotFound = {0} ID를 찾을 수 없습니다.
JdbcDaoImpl.noAuthority = {0} 사용자는 권한이 없습니다.
JdbcDaoImpl.notFound = {0} 사용자를 찾을 수 없습니다.
LdapAuthenticationProvider.badCredentials = 자격 증명에 실패하였습니다.
LdapAuthenticationProvider.credentialsExpired = 자격 증명 유효 기간이 만료되었습니다.
LdapAuthenticationProvider.disabled = 유효하지 않은 사용자입니다.
LdapAuthenticationProvider.expired = 사용자 계정의 유효 기간이 만료 되었습니다.
LdapAuthenticationProvider.locked = 사용자 계정이 잠겨 있습니다.
LdapAuthenticationProvider.emptyUsername = ID에 공백은 허용되지 않습니다.
LdapAuthenticationProvider.onlySupports = UsernamePasswordAuthenticationToken만 지원합니다.
PasswordComparisonAuthenticator.badCredentials = 자격 증명에 실패하였습니다.
PersistentTokenBasedRememberMeServices.cookieStolen = 로그인 상태 유지를 위한 토큰이 일치하지 않습니다. 이전에 사용한 토큰이 타인으로부터 탈취 당했을 수 있습니다.
ProviderManager.providerNotFound = {0}을 위한 AuthenticationProvider를 찾을 수 없습니다.
RememberMeAuthenticationProvider.incorrectKey = 제공된 RememberMeAuthenticationToken에는 필요로 하는 key가 없습니다.
RunAsImplAuthenticationProvider.incorrectKey = 제공된 RunAsUserToken에는 필요로 하는 key가 없습니다.
SubjectDnX509PrincipalExtractor.noMatching = subjectDN\: {0} 내에 매칭되는 패턴이 없습니다.
SwitchUserFilter.noCurrentUser = 요청한 사용자를 찾을 수 없습니다.
SwitchUserFilter.noOriginalAuthentication = Authentication 객체의 원본을 찾을 수 없습니다.

 

추후에 메시지를 수정하셔야 되면 키 값은 수정하시 마시고 메시지만 수정하시면 됩니다. 

 

 

3. message 설정 파일 생성

 

@Configuration
public class MessageConfig {
    @Bean
    public ResourceBundleMessageSource messageSource() {
    	ResourceBundleMessageSource source = new ResourceBundleMessageSource();
    	/* message properties 위치 설정 */
    	source.setBasenames("messages/security_message");
    	/* encoding 룰 설정 */
    	source.setDefaultEncoding("UTF-8");
    	/* 5초간 케싱*/
    	source.setCacheSeconds(5);
    	return source;
    }
}

 

 

이제 클라이언트로 리턴하는 메시지는 위에서 생성한 파일(security-message.properties)에 있는 메시지로 

변경되어 출력이 됩니다.

 

로그인 페이지를 보도록 하죠.

 

4. 로그인 페이지에서 해당 메시지 출력

 

<c:if test="${not empty SPRING_SECURITY_LAST_EXCEPTION}">
	<p class="error">${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message}</p>
	<c:remove var="SPRING_SECURITY_LAST_EXCEPTION" scope="session"/>
</c:if>

 

위의 link파일을 보시면 spring security에서 login validation error 시  /login?error 로 연결됩니다.

그러면서 ${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message} 에 해당 메시지를 담아서 리턴합니다.

 

저의 경우 

AbstractUserDetailsAuthenticationProvider.badCredentials = 잘못된 아이디 이거나 비밀번호가 일치하지 않습니다.

로 수정 하였기 때문에 id나 password가 잘못된 경우 위의 메시지가 출력됩니다.

 

반응형

댓글

💲 추천 글