SpringSecurity 이용하기 - 1 : https://galid1.tistory.com/688 (custom login form 구현)
SpringSecurity 이용하기 - 2 : 현재 포스트 (login Success Handle)
SpringSecurity 이용하기 - 3 : https://galid1.tistory.com/699 (logout 기능 추가하기)
SpringSecurity 이용하기 - 4 : https://galid1.tistory.com/700 (database를 이용한 로그인 구현)
이번 포스팅에서는 spring security formLogin 이용시, 로그인에 성공한 뒤 처리할 로직을 추가하는 방법에 대해 알아보도록 하겠습니다.
https://galid1.tistory.com/688
이전 포스팅과 이어지는 내용이므로 참고하여 설정을 먼저 진행해주세요.
Spring Security에서 FormLogin 성공시 처리로직 추가
1. Security Config 설정
x
package com.galid.security.config;import org.springframework.context.annotation.Configuration;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;public class SecurityConfig extends WebSecurityConfigurerAdapter { protected void configure(HttpSecurity http) throws Exception { http .csrf() .disable() .authorizeRequests() .antMatchers("/login") .permitAll() .anyRequest() .authenticated() .and() .formLogin() .loginPage("/login") .loginProcessingUrl("/doLogin") .usernameParameter("id") .passwordParameter("pw") .successHandler(new MyLoginSuccessHandler()); }}Spring Security에서 제공하는 FormLogin에 성공한뒤, 항상 실행하기를 원하는 로직을 추가하기 위해서는, .formLogin().successHandler()에 LoginSuccessHandler를 추가해주면 됍니다.
2. LoginSuccessHandler 생성
public class MyLoginSuccessHandler implements AuthenticationSuccessHandler { public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { HttpSession session = request.getSession(); session.setAttribute("greeting", authentication.getName() + "님 반갑습니다."); response.sendRedirect("/"); }}다음으로 SuccessHandler 클래스를 생성합니다. 이 LoginSuccessHandler는 AuthenticationSuccessHandler를 꼭 구현해야 합니다. 이후, 로그인 성공시 처리할 로직을 구현하면 됩니다.
저의 경우, session에 greeting이라는 key값으로 user의 이름 + 님 반갑습니다.라는 String값을 담아주었습니다. (login한 user의 이름은 AuthenticationSuccessHandler 구현시 오버라이딩 해야하는 메소드의 매개변수중 Authentication의 getName() 메소드를 통해 얻을수 있습니다.)
마지막으로, 모든 로직을 처리한 뒤, 사용자가 보게될 Page로 redirect를 해주어야합니다.
public class MainController { ("/login") public String getLoginForm() { return "loginPage"; } ("/") public String getIndex() { return "index"; } ("/main") public String getMain() { return "main"; }}사용자가 보게될 페이지는 위의 handler를 보면 알 수 있듯이, index입니다.
3. index 페이지 생성
handlebars를 이용하여 Page를 렌더링할 것입니다. 이전 포스팅에서 이미 설정을 진행했습니다. 하지만 Page 렌더링시 session에 담겨있는 greeting을 가져오기위해서는 추가적인 설정을 해야합니다.
xxxxxxxxxx...handlebars suffix.html expose-session-attributestrueapplication.yml에 위와같이 expose-session-attributes: true를 추가합니다. 이를 통해 Spring handler에서 별도로 session값을 model에 설정하지 않아도, handlebars에서 바로 가져올수 있습니다.
<html lang="en"><head> <meta charset="UTF-8"> <title>Index</title></head><body> {{greeting}}</body></html>위와 같이 간단히 index.html를 작성합니다.
4. 결과확인
서버를 실행하고, 접근하여 id에는 user를 pw에는 Spring security에서 자동으로 생성되는 암호(서버 실행 후, console창에 나타납니다.)를 입력합니다.
'FrameWork > Spring Security' 카테고리의 다른 글
| Spring Security - SpringSecurity 이용하기 4 (Database를 이용한 Login 구현) (4) | 2020.02.23 |
|---|---|
| Spring Security - SpringSecurity 이용하기 3 (logout 기능 추가하기) (0) | 2020.02.23 |
| Spring Security - SpringSecurity 이용하기 1 (custom login form 구현) (2) | 2020.02.12 |
| SpringSecurity - Kakao OAuth2 Client 사용하기 (8) | 2019.07.06 |
| SpringSecurity - SpringSecurity 간단한 설정과 예제 (2) | 2019.07.01 |