-- 자동 로그인 테이블
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 클래스는 아이디 비밀번호 인증값만 받고 보안처리 하고 있기 때문에

커스텀할 필요가 있다

https://niees.tistory.com/18

 

07. spring security 사용자 정보 확장 & mybatis를 이용한 인증 처리& 로그아웃처리

이번에는 security의 기본 User클레스를 확장하여 실제로 필요한 회원 정보를 추가하고 security-context.xml에있던 사용자 인증 쿼리를 mybatis로 이동시켜 사용하겠다. 그리고 처음에 포스팅할때 같이 해

niees.tistory.com

 

커스텀을 2시간 동안 해봤는데 제대로 작동하지 않음..ㅜ

 

일단 다른 방법으로 input hidden을 이용해서 jsp에서는 동작을 하니깐 그 value값을 가져왔다

+ Recent posts