본문 바로가기

스프링

스프링 시큐리티(spring security) JSP 사용(2) 자동 로그인

반응형

최근 웹페이지들은 로그인할 때 '자동 로그인'이나 '로그인 기억하기'라는 이름으로 로그인 상태를 계속 유지하는 기능을 가지고 있습니다. 이 기능은 거의 대부분 쿠키로 구현하는데 스프링 시큐리티로도 구현이 가능합니다.

<security:remember-me> 태그를 사용하여 기능을 구현합니다.

데이터베이스 이용하는 자동로그인

security-context.xml의 일부

	<bean id="customAccessDenied" class="com.security.security.
    CustomAccessDeniedHandler"></bean>
	
	<bean id="customLoginSuccess" class="com.security.security.
    CustomLoginSuccessHandler"></bean>
	
	<bean id="bcryptPasswordEncoder" class="org.springframework.
    security.crypto.bcrypt.BCryptPasswordEncoder"></bean>

	<bean id="customUserDetailsService" class="com.security.security.
    CustomUserDetailsService"></bean>

	<security:http>
    
		<security:intercept-url pattern="/sample/all" access="permitAll"/>
		
		<security:intercept-url pattern="/sample/member" access="hasRole('ROLE_MEMBER')" />
		
		<security:intercept-url pattern="/sample/admin" access="hasRole('ROLE_ADMIN')"/>
		
		<security:access-denied-handler ref="customAccessDenied"/>
        
		<security:form-login login-page="/customLogin" authentication-success-handler-ref="customLoginSuccess"/>
		
		<security:logout logout-url="/customLogout" invalidate-session="true"/>
		
		<security:remember-me data-source-ref="dataSource" token-validity-seconds="604800"/>
		
	</security:http>
	
	<security:authentication-manager>
	
		<security:authentication-provider 
        user-service-ref="customUserDetailsService">
        
			<security:password-encoder ref="bcryptPasswordEncoder"/>
			
		</security:authentication-provider>
		
	</security:authentication-manager>
	
</beans>
  •  data-source-ref : DataSource를 지정하고 테이블을 이용해서 기존 로그인 정보를 기록
  • token-validity-seconds : 쿠키의 유효시간을 지정합니다.

로그인 화면에 자동 로그인 설정

customLogin.jsp의 일부

<form action="/login" method="post">
		<div>
			<input type="text" name="username" value="admin90"/>
		</div>
		<div>
			<input type="password" name="password" value="pw90"/>
		</div>
		<div>
			<input name="remember-me" type="checkbox" />자동 로그인
		</div>
		<div>
			<input type="submit"/>
		</div>
		<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
</form>

이제 로그인을 해보면 쿠키에 'remember-me'라는 이름의 쿠키가 생성된 것을 볼 수 있습니다.

 

로그아웃 시 쿠키 삭제

security-context.xml의 일부

<security:http>
		<security:intercept-url pattern="/sample/all" access="permitAll"/>
		
		<security:intercept-url pattern="/sample/member" access="hasRole('ROLE_MEMBER')" />
		
		<security:intercept-url pattern="/sample/admin" access="hasRole('ROLE_ADMIN')"/>
        
		<security:access-denied-handler ref="customAccessDenied"/>
        
		<security:form-login login-page="/customLogin" authentication-success-handler-ref="customLoginSuccess"/>
		
		<security:logout logout-url="/customLogout" invalidate-session="true"/>
		
		<security:remember-me data-source-ref="dataSource" token-validity-seconds="604800"/>
		
		<security:logout logout-url="/customLogout" invalidate-session="true" delete-cookies="remember-me,JSESSION_ID"/>
		
</security:http>

 

반응형