권한이 필요한 페이지의 URL로 비로그인 상태에서 바로 접속하게 되면 먼저 Filter에 의해서 스프링시큐리티 FilterChain에 로직에 의하여 로그인 페이지로 이동하게된다.
이 로직 이후 처음 사용자가 요청했던 페이지로 이동시켜보자.
개발할때 매번 로그인하고 메인화면을 봐야하는 팀원들을 위함이다.
우선은 LoginSuccessHandler에서 설정을 해준다.
스프링 자체적으로 기존에 요청한 URI을 저장한 객체가 있다.
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws ServletException, IOException {
// 사용자가 요청 URI가 담겨있는 SavedRequest 객체
RequestCache requestCache = new HttpSessionRequestCache();
SavedRequest savedRequest = requestCache.getRequest(request, response);
이 객체에서 해당 메소드로 uri를 받아서 리다이렉트를 해주면 된다.
uri = savedRequest.getRedirectUrl(); // 사용자가 최초 요청한 uri
response 객체를 이용하여 redirect 해준다.
response.sendRedirect(uri);
로그인페이지로 Client가 uri를 요청했을 경우
지금 프로젝트하고있는 로그인 페이지 url이다.
이 페이지로 요청했을 경우
SavedRequest 객체에 null 이찍힌다. 이런경우 각 권한을 선별해서 각 메인페이지로 리다이렉트 해준다.
// 권한 선별
List<String> roleNames = new ArrayList<>();
authentication.getAuthorities().forEach(authority ->{
roleNames.add(authority.getAuthority());
});
// 각 권한 메인페이지로 리다이렉트
if(roleNames.contains("S01")) {
response.sendRedirect("/stu/main");
}
if(roleNames.contains("E11")) {
response.sendRedirect("/emp/main");
}
if(roleNames.contains("E12")) {
response.sendRedirect("/tch/main");
}
'Study Hard > HW' 카테고리의 다른 글
[스프링시큐리티] 로그인 실패 메세지 구현 (0) | 2023.07.13 |
---|---|
스프링-시큐리티 session.invalidate() 하면 403에러 뜨는 이유 (0) | 2023.07.13 |
Mybatis resultType="hashmap"일때 NULL 값 받아오기 (0) | 2023.07.11 |
RequestParam 어노테이션의 양면성 (0) | 2023.07.11 |
[환경설정] SpringLegacy에 log4j -> log4j2 로그 적용 (오라클DB) (0) | 2023.07.10 |
댓글