Spring Security 강제 로그아웃

Dana's Log·2023년 3월 7일
0
  1. SpringSecurity에서 사용자의 요청을 처리할때 세션에 인증정보가 있으면 해당 인증정보를 Security Context에 저장함
  2. 인증정보가 저장되어있는 객체는 SessionRegistry이며, getAllPrincipals() 메소드로 현재 인증된 모든 사용자 세션을 가져올수있음.
  3. 반환된 객체를 로그인에 사용한 UserDetails 혹은 User 객체를 상속한 객체로 캐스팅 후 루프를 돌리며 특정 유저의 Unique필드와 캐스팅한 객체의 같은 필드를 대조한다.
    대조하다 정지시킬 유저의 Unique필드와 같을때 SessionRegistry의 getAllSessions()로 해당 유저의 객체로 생성된 모든 세션을 가져옴.
    반환받은 객체는 SessionInfomation이란 객체의 컬렉션인데, 이 역시 루프를 돌려서 정지시킬 계정의 특정 unique값과 대조하여 해당하는 세션을 만료시켜 로그아웃 시키는 기능을 이용함.

참고URL:
https://dev-gyus.github.io/spring/2021/03/18/SpringSecurity-AccountLock-2.html
https://okky.kr/articles/616644

	/**
	 * 삭제된 사용자 세션 날리기
	 * @param sqlSession
	 * @param params
	 */
	public void blockUser(@SqlRes(SID)SqlSession sqlSession, Map<String, String[]> params) {
		List<String> delEmployeeList = new ArrayList<String>();
		delEmployeeList = sqlSession.selectList("admin.employee_manage.getDeleteEmployee",params);
		
		for (String delEmp : delEmployeeList) {
			List<SessionInformation> sessionList = this.sessionRegistry.getAllSessions(delEmp, false);
			for(SessionInformation session : sessionList) {
				if(!session.isExpired()) {
					session.expireNow();
				}
			}
		}
	}	
profile
다나로그

0개의 댓글