본문 바로가기
Spring

Spring Security 구성하기(2) - 패턴구분 및 로그아웃

by 하르싼 2019. 11. 26.
반응형
 개발환경
Os  Windows 10
 IDE  STS 3.9.6
 Jdk  1.8.0_172
 Spring 5.2.1.RELEASE
Spring Security 4.2.13.RELEASE
 DB  MsSql
 View  JSP

 

1. security-context.xml > url 별로 접근권한 구분

 

  	 		 	      	     	     	     	     	       		  		  	  	  	 	     	         				 	             	         	     	   

 1) security:intercept-url pattern

  - hasRole(role) : 현재 로그인된 사용자가 설정된 role이 존재하면 true 를 반환

  - hasAnyRole(role1,role2) : 현재 로그이된 사용자가 콤마로 구분된 role중 하나라도 가지고 있으면 true를 반환 권한의 갯수는 제한이 없음  - permitAll : 어떤 사용자든 true를 반환  - denyAll : 어떤 사용자든 false를 반환    그외에 여러 내장 표현식이 있으나 

hasRole,hasAnyRole2,permitAll 3개의 권한으로 구분하여 예시를 진행

    패턴을 정의할때 설정된 순서대로 동작을 하기에 설정 순서도 중요 /** permitAll 이 최상위에 있을시 /board/** /admin/** 무시하게됨

    /board/** 패턴은 일반유저와 관리자 권한을 가진 사용자는 접속이 가능하고, /admin/** 패턴은 관리자만 접속이 가능하도록 설정

 

 2) security:logout

  - logout-url : 로그아웃을 요청경로

  - logout-success-url : 로그아웃 성공시 요청경로

    시큐리티에서 제공해주는 로그아웃 로그인 기능은 POST 이고 전송시에는 csrf 값이 필요로 하다 그러나 지금 진행하는 기능은 GET 방식이므로 

    csrf 기능이 활성화 되어있을시 로그아웃기능을 GET 으로 요청하게되면 에러가 발생하게 되므로 csrf를 잠시 비활성화를 해놓고 진행

 

 

 

 

2. Controller 및 View 추가

 - 테스트를 위해 HomeController.java 파일에 /board/board , /admin/admin 기능추가 및 board.jsp , admin.jsp 추가 

 

 

	@RequestMapping(value = "/admin/admin", method = RequestMethod.GET) 	public String admin(HttpServletRequest request,Principal principal,Authentication authentication) { 		logger.info("ADMIN!"); 		  		return "admin"; 	} 	@RequestMapping(value = "/board/board", method = RequestMethod.GET) 	public String board(HttpServletRequest request,Principal principal,Authentication authentication) { 		logger.info("BOARD!"); 		  		return "board"; 	}

 

 - home.jsp 파일에 아래 두라인 추가

 

 <a href="/board/board">일반유저</a><br>

 <a href="/admin/admin">관리자</a><br>

 <a href="/logout">로그아웃</a>

 

 

3. 실행화면 

 - localhost:8080/ 메인화면에서 로그인전 일반유저페이지를 누르게되면 로그인화면으로 이동

 

 

 -  

 

  - 일반유저링크를 선택 후 user / 1234 로그인 하게되면 일반유저페이지로 이동 하게되고 관리자링크를 선택시에는 403 권한오류페이지를 응답

 

 

 - admin / 1234 관리자로 로그인하게되면 관리자 페이지도 접속이 가능하고 csrf 비활성화 한 상태에서 로그아웃 클릭시 메인페이지로 이동

 

 

 

 

깃허브 : https://github.com/devHjlee/SpringSecurity.git

커밋 : f607766ff3af9a3c60094f1ed6334d5e7664b7cb

 

d

 

반응형

댓글