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 속성을 추가했습니다.
'dev > Spring-security' 카테고리의 다른 글
[Spring] Spring security - ApplicationFilterchain, DelegatingFilterProxy (0) | 2022.08.20 |
---|---|
[Spring] Filter (0) | 2022.08.20 |
[Spring] Spring Security 대략적인 흐름 (0) | 2022.08.06 |
[Spring] spring security 중간정리 (0) | 2022.08.06 |
[Spring] UserDetailsService 활용 (0) | 2022.08.05 |