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-attributestrue
application.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 |