-- 자동 로그인 테이블
create table persistent_logins(
username varchar2(64) not null,
series varchar2(64) primary key,
token varchar2(64) not null,
last_used timestamp not null
);
자동 로그인 테이블은 공식 문서에서 해당 테이블로 구성되어 있다.
하지만 나는 member table에 username을 쓰지않는다.
별명인 userNickName을 사용하기 떄문에 이 부분을 커스터마이징 해야 맞는 프로그래밍이라 생각
remember-me의 속성은
<security:remember-me data-source-ref="dataSource" token-validity-seconds="604800"/>
key | 쿠키에 사용되는 값을 암호화 하기 위한 키(Key)값 |
data-source-ref | DataSource를 지정하고 테이블을 이용해서 기존 로그인 정보를 기록(옵션) |
remember-me-cookie | 브라우저에 보관되는 쿠키의 이름을 지정한다. 기본값은 'remember-me'이다 |
remember-me-parameter | 웹 화면에서 로그인할때 'remember-me'는 대부분 체크박스를 이용해 처리한다. 이때 체크박스 태그는 name속성을 의미한다 |
token-validity-seconds | 쿠키의 유효시간을 지정한다 |
Mapper에 문제 있어서 코드 변경
value='<sec:authentication property="principal.member.userNickName"/>'>
value='<sec:authentication property="principal.userNickName"/>'>
userNickName을 찾으면 찾지를 못한다.
security에서 인증된 사용자 정보는 principal에 저장이 된다.
member도 sec의 문법에 의해서 member에 저장되는 것 같다.
principal.member를 찍어보면 MemberVO에 있는 객체들이 CustomUser 클래스로 이동해서 User를 상속받고 있는 이 member에 저장되는것 같다.
@Getter
public class CustomUser extends User{
private static final long serialVesionUID = 1L;
private MemberVO member;
public CustomUser(String userEmail, String userPwd, Collection<? extends GrantedAuthority> authorities) {
super(userEmail, userPwd, authorities);
}
public CustomUser(MemberVO vo) {
super(vo.getUserEmail(), vo.getUserPwd(), vo.getAuthList().stream()
.map(auth -> new SimpleGrantedAuthority(auth.getAuth()))
.collect(Collectors.toList()));
this.member = vo;
}
}
header.jsp에 로그인이 되어있는 화면과 로그인 되었을 시 화면을 구분해준다
<sec:authorize access="isAnonymous()">
</sec:authorize>
<sec:authorize access="isAuthenticated()">
</sec:authorize>
isAnonymous는 인증이 되지 않은 사용자일때 화면이다 그러면 회원가입하고 로그인 부분이 보이게 설정을 해준다
js에서 sec 표현식으로 .jsp에서 작동하는데 js에서 콘솔을 찍을 시
이상하게 인코딩해서 나오는 현상을 발견했다. 한글을 처리를 하지 못하는 것 같다.
<sec:authorize access="isAuthenticated()">
secreplyer = '<sec:authentication property="principal.member.userNickName"/>';
</sec:authorize>
관리자99 라고 나와야 하는데 한글을 &# 이런식으로 처리되고 있다.
User 클래스
@Getter
public class CustomUser extends User{
private static final long serialVesionUID = 1L;
private MemberVO member;
public CustomUser(String userEmail, String userPwd, String userNickName, Collection<? extends GrantedAuthority> authorities) {
super(userEmail, userPwd ,authorities);
}
public CustomUser(MemberVO vo) {
super(vo.getUserEmail(), vo.getUserPwd(), vo.getAuthList().stream()
.map(auth -> new SimpleGrantedAuthority(auth.getAuth()))
.collect(Collectors.toList()));
this.member = vo;
}
}
CustomUser은 User을 상속받고 있지만, User 클래스는 아이디 비밀번호 인증값만 받고 보안처리 하고 있기 때문에
커스텀할 필요가 있다
07. spring security 사용자 정보 확장 & mybatis를 이용한 인증 처리& 로그아웃처리
이번에는 security의 기본 User클레스를 확장하여 실제로 필요한 회원 정보를 추가하고 security-context.xml에있던 사용자 인증 쿼리를 mybatis로 이동시켜 사용하겠다. 그리고 처음에 포스팅할때 같이 해
niees.tistory.com
커스텀을 2시간 동안 해봤는데 제대로 작동하지 않음..ㅜ
일단 다른 방법으로 input hidden을 이용해서 jsp에서는 동작을 하니깐 그 value값을 가져왔다
'Spring' 카테고리의 다른 글
스프링 : 추천 비추천 기능 구현 (0) | 2021.11.30 |
---|---|
스프링 시큐리티 : 로그아웃 처리 (0) | 2021.11.25 |
스프링 : security iframe , embed 보안 취약 (0) | 2021.11.23 |
스프링 : Ajax val(), text() 동적 객체 값 가져오기 (0) | 2021.11.23 |
스프링 : HttpMessageNotReadableException (0) | 2021.11.23 |