개발환경 | |
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
'Spring' 카테고리의 다른 글
Intellij Spring boot Jmx RMI remote objects have benn exported (0) | 2022.09.13 |
---|---|
Spring + Mssql + Mybatis 연동 (0) | 2019.12.03 |
Spring Security 구성하기(1) (0) | 2019.11.26 |
Spring Boot + Maven 웹프로젝트 시작하기_ application.properties 설정 (0) | 2018.10.01 |
Spring Boot + Maven 웹프로젝트 시작하기_프로젝트생성 (0) | 2018.09.21 |
댓글