AppLoginUser pmUser = null;
if(pmList.isEmpty() == false) {
PmVO pmVo = pmList.get(0);
List<GrantedAuthority> authList = new ArrayList<>();
if(pmVo != null) {
List<SecurityRole> roles = new ArrayList<SecurityRole>();
roles.add(SecurityRole.USER); // 기본권한
if(pmVo.isLoginAble()) {
roles.add(SecurityRole.PM); // PM권한
}
List<String> adminEmails = new ArrayList<String>();
adminEmails.add("champcom90@gmail.com");
if(adminEmails.contains(pmVo.getId())) {
roles.add(SecurityRole.ADMIN); // 관리자권한
}
// 권한 ENUM을 시큐리티 ROLE로 변환
for(SecurityRole r : roles) {
authList.add(new SimpleGrantedAuthority(r.getValue()));
}
}
pmUser = AppLoginUser.ofPm(pmVo, authList);
springUserSupportService.bindProjectScope(pmUser);
pmUser.setLoginIp(UtilRequest.getClientIp()); // 로그인한 IP설정
Authentication authentication = new UsernamePasswordAuthenticationToken(pmUser, null, pmUser.getAuthorities());
SecurityContext securityContext = SecurityContextHolder.getContext();
securityContext.setAuthentication(authentication);
session.invalidate(); // 세션 초기화(로그인 후 세션값 변경되어야 하며 로그인 상태에서의 세션값은 고정이어야 한다.)
session = request.getSession(); // 세션 재발급(로그인 후 세션값 변경되어야 하며 로그인 상태에서의 세션값은 고정이어야 한다.)
// session.setAttribute("SPRING_SECURITY_CONTEXT", securityContext); // 이전에는 SPRING_SECURITY_CONTEXT 속성에 바로 접근해서 세션값 변경하는 게 가능했지만 지금은 불가능
session.invalidate(); // 세션 초기화
session = request.getSession(); // 세션 재발급
'Framework > Spring Security' 카테고리의 다른 글
[Framework] Spring Security Bcrypt 암호화의 salt 값은 어디에 저장되는가? (0) | 2023.08.31 |
---|