Form 인증의 과정은?
-
클라이언트가 자원접근 시도
-
서버의 자원접근 보안정책에 맞지않으면 로그인페이지로 리다이렉트
-
POST 방식으로 로그인 인증시도
-
SpringSecurity가 세션 ID를 생성 , 인증결과를 담은 인증(Athenciation) 객체를 생성, SecurityContext 객체를 생성하여 인증객체를 담고 SecurityContext 객체를 Session에 담아보낸다.
-
이후 접근에는 SpringSecurity가 Session에서 인증토큰 존재여부를 확인하여 자원접근을 결정함
Form 인증 방식의 API들은 무엇인가요?
Form Login 인증 API
-
http.formLogin() : Form 로그인 인증기능 작동
formLogin()의 하위 API들
-
loginPage(url)
: 사용자 정의 로그인 페이지
-
defaultSuccessUrl(url) : 로그인 성공 후 이동 페이지
-
failureUrl(url) : 실패 후 이동 페이지
-
usernameParameter("username") : 폼 태그 안의 유저 네임에 해당하는 input 파라미터네임을 변경 default = username
-
passwordParameter("password") : 폼 태그 안의 유저 패스워드에 해당하는 password 파라미터네임을 변경 default = password
-
loginProcessingUrl(url) : 로그인 Form 태그의 Action 속성 url 지정 default = /login
-
successHandler(method()) : 로그인 성공 후 작동하는 핸들러(Controller) , AuthenticationSuccessHandler 인터페이스의 구현객체가 온다.
-
failureHandler(method()) : 로그인 실패 후 작동하는 핸들러(Controller) , AuthenticationFailureHandler 인터페이스 구현객체가 온다.
배운코드
-
.permitAll() : 해당 api의 접근은 모두 허가한다.
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http//인가
.authorizeRequests() //요청들에 대한
.anyRequest().authenticated();//어느 요청이든. 인증을한다.
http//인증
.formLogin()//폼로그인 방식으로 인증작업을 하겠다.
.loginPage("/loginPage")//로그인할 url
.defaultSuccessUrl("/")//로그인 성공시 url
.failureUrl("/loginPage")//로그인 실패시 url
.usernameParameter("userId")// input[name='']
.passwordParameter("passwd")// password[name='']
.loginProcessingUrl("/login_proc")// form[action='']
.successHandler(new AuthenticationSuccessHandler() {//로그인 성공시 작동할 핸들러 AuthenticationSuccessHandler 구현객체가 온다.
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
System.out.println("authentication " + authentication.getName());//인증자의 이름 리턴
response.sendRedirect("/");
}
})
.failureHandler(new AuthenticationFailureHandler() {// 로그인 실패시 작동할 핸들러 AuthenticationFailureHandler 구현객체가 온다.
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
System.out.println("exception "+exception.getMessage());// AuthenticationException 의 메세지 내용 전달
response.sendRedirect("/loginPage");
}
})
.permitAll();
;
}
}
'springframework > 시작하자SpringSecurity' 카테고리의 다른 글
6.Remember Me 인증 (0) | 2020.09.19 |
---|---|
5.LogoutFilter (0) | 2020.09.19 |
4.UsernamePasswordAuthenticationFilter (0) | 2020.09.19 |
2.사용자 정의 보안 구현 (0) | 2020.09.18 |
1.스프링 시큐리티와 의존성 추가시에 일어나는 일들. (0) | 2020.09.17 |