본문 바로가기
dev/Spring-security

[Spring] Spring-security를 JSP에서 사용하기

by dev_Step 2022. 8. 20.

 

JSP 에서 스프링 시큐리티와 관련된 정보를 출력하거나 사용하려면 JSP 상단에 스프링-시큐리티 관련 태그 라이브러리를 선언하고, <sec:authentication> 태그와 principal 이라는 이름의 속성을 사용합니다.

 

 

Spring-security 에서 자주 사용되는 표현식

hasRole([role])
hasAuthority([authority]) 
해당 권한이 있으면 True
hasAnyRole([role,role2])
hasAnyAuthority([authority])
여러 권한들 중에서 하나라도 해당 권한이 있으면 True
principal 현재 사용자 정보를 의미
permitAll 모든 사용자에게 허용
denyAll 모든 사용자에게 거부
isAnonmous() - <sec:authorize acess="isAnonmous()"> 익명의 사용자의 경우(로그인을 하지 않은 경우도 해당) True
isAuthenticated() - <sec:authorize acess="isAuthenticated()"> 인증된 사용자면 True
isFullyAuthenticated() -  <sec:authorize acess="isFullyAuthenticated() "> Remember-me로 인증된 것이 아닌 사용자인 경우 True

 

===========================================================================================

 

 

자동 로그인 처리 (Remember-me) 

- 기존의 Web 페이지들은 자동 로그인 기능은 대부분 Cookie 를 활용하여 사용되고 있습니다.

Spring-security 의 경우는 'remember-me' 기능을 메모리상에서 처리하거나, 데이터베이스를 이용하는 형태로 약간의 설정만으로 구현이 가능합니다.

 

security-context에서

<security-remember-me> 태그를 이용하여 구현하고  다음과 같은 속성 값들이 있습니다.

  - key : 쿠키에 사용되는 값을 암호화하기 위한 key 값

  - data-source-ref : dataSource 를 지정하고 테이블을 이용해서 기존 로그인 정보를 기록(옵션)

  - remember-me-cookie : 브라우저에 보관되는 쿠키의 이름을 지정합니다  default 값은 'remember-me' 입니다.

  - remember-me-parameter : 웹 화면에서 로그인할 때 'rememeber-me'는 대부분 체크박스를 이용해서 처리합니다. 이때 체크박스 태그는 name속성을 의미 합니다.

  - token-validity-seconds : 쿠키의 유효시간을 지정합니다.

 

 

>> Spring-security 에서 'remember-me' 기능 역시 JDBC를 이용하는 경우처럼 지정된 이름의 테이블을 생성하면 지정된 SQL문이 실행되면서 이를 처리하는 방식과 직접 구현하는 방식이 있습니다.

 >> 생성된 테이블은 로그인을 유지하는데 필요한 정보를 보관하는 용도일뿐, 커스터마이징 하기 보다는 지정된 형식의 테이블을 생성합니다.

 -- 기본 테이블

 -- security-context.xml 설정 추가 & JSP CHECKBOX 생성

 >> 추가 후 로그인 시 Cookie 가  remember-me 로 생성된 것을 확인 할 수 있다.

 >> 자동로그인을 설정한 경우 브라우저를 닫았다가 다시 접속하더래도 자동으로 로그인되는 것을 확인 할 수 있다.

 

>> 로그인시에 Database에 persistent_logins 테이블에 해당 데이터가 주입된것을 확인할 수 있다.

>> 로그아웃시 persistent_logins  테이블에도 데이터가 삭제된다.

>> JAVA 설정

 

 

-- 로그아웃시 Cookie 삭제

 >> 자동 로그인 기능을 ㅇ요하는 경우에 사용자가 로그아웃 하면 기존과 달리 자동 로그인에 사용하는 쿠키도 삭제해주도록 쿠키를 삭제하는 항목을 security-context.xml에 지정해 줍니다.

 >> 기존의 <security:logout> 태그이   delete-cookie 속성을 추가했습니다.