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(); // 세션 재발급

+ Recent posts