목록스프링 (18)
경주장
동시 세션 제어 - 최대 세션 허용 개수를 초과한 요청이 발생했을 때 어떻게 처리할 것인가 Strategy 1 - 이전 사용자 세션 만료 - maxSessionPreventsLogin(false) 기본설정 Strategy 2 - 현재 사용자 인증 실패 - maxSessionPreventsLogin(true) http.sessionManagement( ) : 세션 관리 기능이 작동함 http.sessionManagement() .maximumSessions(1) // 최대 허용 가능 세션 수 , -1 : 무제한 로그인 세션 허용 .maxSessionsPreventsLogin(true) // 동시 로그인 차단함, false : 기존 세션 만료(default) .expiredUrl("/expired ") //..
• 익명사용자 인증 처리 필터 • 익명사용자와 인증 사용자를 구분해서 처리하기 위한 용도로 사용 • 화면에서 인증 여부를 구현할 때 isAnonymous() 와 isAuthenticated() 로 구분해서 사용 • 인증객체를 세션에 저장하지 않는다 -> SecurityContext에 저장한다. 다른 필터에 비해 역할이 꽤 간단하다. 인증된 사용자와 익명 사용자를 조금 더 명확하게 구분하기 위해 익명사용자라 할지라도 인증객체를 null이아닌 익명사용자용 인증객체를 설정하는 역할을 한다. AnoymousAuthenticationFilter의 doFilter public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) { if..
1. Remember-Me 기능 - 세션이 만료되고 웹 브라우저가 종료된 후에도 어플리케이션이 사용자를 기억하는 기능 2. Remember-Me 쿠키에 대한 Http 요청을 확인 -> 토큰 기반 인증을 사용해 유효성을 검사하고 토큰이 검증되면 사용자는 로그인 된다. http.rememberMe() : rememberMe 기능이 작동함 http.rememberMe() .rememberMeParameter("remember-me") //파라미터 명 .tokenValiditySeconds(3600) //토큰 유효 시간 .alwaysRemember(true) //항상 실행 여부 .userDetailsService(userDetailsService()); // 1. SecurityContext의 Authentic..
로그아웃은 1. 세션 무효화 2. 인증 토큰 삭제 3. 쿠키 정보 삭제 4. 로그인 페이지로 리디렉트 의 순서로 이루어 진다. http.logout(): 로그아웃 기능이 작동한다 http.logout() .logoutUrl("/logout") //로그아웃 처리URL .logoutSuccessUrl("/login") //로그아웃 성공 후 이동 페이지 .deleteCookies("JSESSIONID", "remember-me") //로그아웃 후 삭제 쿠키 이름 .addLogoutHandler(logoutHandler()) //로그아웃 핸들러 .logoutSuccessHandler(logoutSuccessHandler()); //로그아웃 성공 핸들러 다른 기능들은 직관적이지만 logoutHandler와 log..
폼인증을 처리하는 UsernamePasswordAuthenticationFilter는 1. 요청이 loginProcessingUrl인지 확인하고 그렇지 않다면 다음 filter를 호출한다. 2. 요청의 username, password를 바탕으로 Authentication을 생성하여 AuthenticationManager(인증관리자)에게 인증을 요청한다. 3. AuthenticationManager는 내부적으로 AuthenticationProvider를 선정하여 인증을 진행하고 실패하면 AuthenticationException을 Filter까지 던지고 Filter는 FailureHandler를 호출한다. 4. 인증에 성공했다면 User,Authorities를 포함한 Authentication객체가 생성..
Post방식으로 Client가 username, password를 전송한다. Server는 Session을 생성하고 Session에 최종 성공한 인증 결과를 담은 Authentication 타입의 객체를 포함한 Security Context를 생성하고 이것을 Session에 저장함 : 인증성공! 다시 요청이 들어오면 인증을 받은 사용자의 요청에 포함된 세션 인증 토큰의 존재여부 판단 한다. protected void configure(HttpSecurity http) throws Exception { http.formLogin() .loginPage("/login.html") // 사용자 정의 로그인 페이지 .defaultSuccessUrl("/home")// 로그인 성공 후 이동 페이지 .failure..
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest().authenticated() .and() .formLogin(); } } 모든 요청에 대해 인증을 받도록 요구하는 authorization 폼 로그인인증을 제공 spring: security: user: name: user password: 1234 application.yml => 기본 유저 고정