스프링 시큐리티 정리2

조수경·2022년 2월 24일
0

Spring

목록 보기
41/43
  1. 스프링 시큐리티 표현식
  • 인증 및 권한 정보에 따라 화면을 동적으로 구성
  • 로그인한 사용자 정보를 보여줄 수 있음
  1. 표현식
  • hasRole("ROLE_MEMBER") : 해당 룰이 있는가?
  • hasAnyrole(["ROLE_MEMBER", "ROLE_AUTH"]) : 여러 룰들 중 하나라도 해당하는가?
    - principal : 인증된 사용자의 사용자 정보(UserDeails 인터페이스)
    - authentication : 인증된 사용자의 인증 정보
  • permitAll : 모든 사용자에게 허용
    - denyAll : 모든 사용자에게 거부
    - isAnonymous() : 로그인 하지 않아도 해당됨
    - isAuthenticatied() : 로그인 해야 해당됨
  • isFullyAuthenticated() : 일반적(remember-me) 방법을 인증된 사용자일 경우 true

security-context

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:security="http://www.springframework.org/schema/security"
	xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<!-- 로그인 성공!
	인증(로그인) 성공 처리자 AuthenticationSuccessHandler
	-->
	<bean id="customLoginSuccess"
		class="kr.or.ddit.security.CustomLoginSuccessHandler"></bean>
	
	<!-- 로그인 실패! -->
	<bean id="customAccessDenied" 
		class="kr.or.ddit.security.CustomAccessDeniedHandler"></bean>
	
	<!-- 스프링 시큐리티의 UserDetailService를 구현해서 사용자의 상세 정보를 얻어오기 위함 -->
	<bean id="customUserDetailService" 
		class="kr.or.ddit.security.CustomUserDetailService"></bean>
		
	<!-- 사용자가 정의한 비밀번호 암호화 처리기를 빈으로 등록 -->
	<bean id="customPasswordEncoder"
		class="kr.or.ddit.security.CustomNoOpPasswordEncoder"></bean>
	
	<security:http>
	<!-- URI 패턴으로 접근 제한을 설정함 
	pattern : url 요청 경로 
	access  : 접근 제한 정책
	-->
<!-- 		<security:intercept-url pattern="/board/list" access="permitAll" /> -->
		<security:intercept-url pattern="/cus/detail" 
			access="hasRole('ROLE_MEMBER')" />
<!-- 		<security:intercept-url pattern="/notice/list" access="permitAll" /> -->
<!-- 		<security:intercept-url pattern="/notice/register"  -->
<!-- 			access="hasRole('ROLE_ADMIN')" /> -->

		<!-- 사용자가 정의한 로그인 페이지의 URI를 지정함 -->
		<security:form-login login-page="/login" 
			authentication-success-handler-ref="customLoginSuccess" />
			
		<!-- 접근 거부 처리자(접근 거부가 발생한 상황을 처리)의 URI를 지정-->
		<security:access-denied-handler ref="customAccessDenied" />
		
		<!-- root-context.xml에 있음 
			데이터소스를 지정하고 테이블(persistent_logins)을 이용해서 기존 로그인 정보를 기록
			쿠키의 유효시간을 지정(604800 : 7일)
		-->
		<security:remember-me data-source-ref="dataSource" 
		token-validity-seconds="604800" />
		
		<!-- 로그아웃. 세션을 무효화 함 -->
		<security:logout logout-url="/logout" invalidate-session="true"
		delete-cookies="remember-me.JSESSION_ID" />
		
	</security:http>
	
	<security:authentication-manager>
	<!-- 
	지정된 아이디와 패스워드로 로그인이 가능하도록 설정함
	스프링 시큐리티 5버전부터는 패스워드 암호화 처리기를 반드시 이용하도록 변경이 되었음
	-->
		<security:authentication-provider user-service-ref="customUserDetailService">
			<!-- 사용자가 정의한 비밀번호 암호화 처리기 지정 -->
			<security:password-encoder ref="customPasswordEncoder" />
		</security:authentication-provider>
	</security:authentication-manager>
</beans>


profile
신입 개발자 입니다!!!

0개의 댓글