▸Spring Security

스프링 Security_로그인_security 태그 라이브러리 [9/9]

코데방 2020. 3. 31.
728x90
- Develop OS : Windows10 Ent, 64bit
- WEB/WAS Server : Tomcat v9.0
- DBMS : MySQL 5.7.29 for Linux (Docker)
- Language : JAVA 1.8 (JDK 1.8)
- Framwork : Spring 3.1.1 Release
- Build Tool : Maven 3.6.3
- ORM : Mybatis 3.2.8

 

커스터마이징 순서대로 총 9개의 포스팅으로 나눠져 있습니다. 순서대로 보면 쉽게 적용할 수 있습니다.

 

[Spring MVC/- 기본 문법] - 스프링 Security_로그인_기본 컨텍스트 설정 [1/9]

[Spring MVC/- 기본 문법] - 스프링 Security_로그인_DB 연동 로직 작성 [2/9]

[Spring MVC/- 기본 문법] - 스프링 Security_로그인_로그인 실패 대응 로직 [3/9]

[Spring MVC/- 기본 문법] - 스프링 Security_로그인_로그인 성공 대응 로직 [4/9]

[Spring MVC/- 기본 문법] - 스프링 Security_로그인_DB 패스워드 암호화 [5/9]

[Spring MVC/- 기본 문법] - 스프링 Security_로그인_암호화된 DB 패스워드로 인증 [6/9]

[Spring MVC/- 기본 문법] - 스프링 Security_로그인_Principal 객체 [7/9]

[Spring MVC/- 기본 문법] - 스프링 Security_로그인_자동 로그인(Remember-me) [8/9]

[Spring MVC/- 기본 문법] - 스프링 Security_로그인_security 태그 라이브러리 [9/9]

 

 


 

 

백엔드의 내부 로직은 모두 작성했으므로 이제 뷰만 작성하면 됩니다. 관리자 권한이 있다면 관리자 페이지 링크를 보여주거나, 로그인에 성공해서 특정 권한을 획득한 사용자에게는 로그인 버튼 대신 로그아웃 버튼을 보여주는 등의 로직을 사용할 수 있습니다.

 

권한 정보는 세션에 저장돼 있기 때문에 가져다가 사용해도 무방하지만, Security 태그를 사용하면 좀 더 가시성 좋게 코드를 구성할 수 있습니다. 아래와 같이 의존 설정 해줍니다. JSP 파일에서 태그 라이브러리를 추가해줍니다.

 

<%@ taglib uri="http://www.springframework.org/security/tags" prefix="s" %>

 

 


 

 

[ 권한에 따른 조건문 ]

 

<!-- 표현식이 지정한 권한에 맞을 때만 출력 -->
<sec:authorize access="isAnonymous()">
   로그인
   회원가입
</sec:authorize>

<sec:authorize access="isAuthenticated()">
   로그아웃
   회원정보보기
</sec:authorize>

<sec:authorize access="hasRole('admin')">
  관리자 페이지
</sec:authorize>

 

JSTL의 <c:when...> 태그와 비슷한 기능입니다. 스프링 Security 컨텍스트 설정 파일에서 url intercept 조건을 지정할 때 사용했던 표현식과 동일합니다. 표현식이 지정한 권한에 맞는 사용자에게만 태그 안의 내용을 출력해줍니다. 

 

표현식 설명
hasRole('role') 해당 권한이 있을 경우
hasAnyRole('role1,'role2') 포함된 권한 중 하나라도 있을 경우
isAuthenticated() 권한에 관계없이 로그인 인증을 받은 경우
isFullyAuthenticated() 권한에 관계없이 인증에 성공했고, 자동 로그인이 비활성인 경우
isAnonymous() 권한이 없는 익명의 사용자일 경우
isRememberMe() 자동 로그인을 사용하는 경우
permitAll 모든 경우 출력함
denyAll 모든 경우 출력하지 않음

 

 

로그인 인증에 성공한 경우

 

 

 


 

 

 

[ 사용자 정보 확인 ]

 

현재 인증한 사용자의 정보를 가져오는 태그입니다. 스프링 Security 구조대로 짰다면 손쉽게 태그를 이용해 가져올 수 있습니다. 아래와 같이 프로퍼티를 principal로 주고 변수에 담아주면 자바 코드에서 getProperty()를 실행한것과 동일합니다. 즉 사용자 정보를 담고 있는 UserDetails 객체가 반환됩니다.

 

한줄로 사용자 객체를 받은 뒤에 EL 태그를 사용해서 간략하게 사용할 수 있습니다. 그냥 이 객체를 세션에 저장해두고 가져다 쓰면 JSP에서의 코드는 더 간단해질 수 있겠지만 서버단의 로직에서는 중복이 발생하기 때문에 그냥 프레임워크에서 설계해둔대로 사용하는 것이 가장 깔끔합니다.

 

user라는 변수에 객체를 저장해두겠다는 의미입니다. 기본 Scope는 페이지 범위로 지정되고, 범위를 더 넓힐 수는 있지만 어차피 세션에서 가지고 오는 객체이기 때문에 굳이 그렇게 사용할 이유가 없을 것 같습니다. PW는 인증을 마친 후 null처리했기 때문에 나오지 않고 있습니다. 

 

<s:authentication property="principal" var="user"/> 
타입 : ${user} <br>
ID : ${user.username} <br>
PW : ${user.password}
</s:authorize>

 

728x90

댓글

💲 추천 글