Spring Security-3日目の整数
17556 ワード
8.API-AnonymousAuthenticationFilterの認証
isAnnonymous()
とisAuthenticated()
使用9.認証API-同時セッション制御/セッション固定保護/セッションポリシー
同時セッション
http
.sessionManagement() // 세션관리 기능 동작
.maximumSessions(1) // 최대 허용 가능 세션 수, -1 : 무제한
.maxSessionsPreventsLogin(true); // 동시 로그인 차단(현재 세션 만료)
// false : 기존 세션만료
.invalidSessionUrl("/invalid") // 세션이 유효하지않을때 이동 할 페이지
.expiredUrl("/expired"); // 세션이 만료될 경우 이동 할 페이지
セッション固定保護http
.sessionManagement()
.sessionFixation().changeSessionId() //기본값, 세션에 id를 새롭게 변경
.sessionFixation().migrateSession() // 기존에 session에 있던 정보를 새로운 session에
// copy하여 새롭게 만들어서 사용한다.
.sessionFixation().newSession() // 이전에 Session 값을 copy하지 않고 정말 새롭게
// session을 만들어서 사용 한다.
.sessionFixation().none() // 아무런 작업도 하지않음.
セッションポリシーhttp
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.Always) // 스프링 시큐리티가 항상 세션 생성
.sessionCreationPolicy(SessionCreationPolicy.If_Required) // 필요시 생성(기본값)
.sessionCreationPolicy(SessionCreationPolicy.Never) // 생성하지 않지만 이미 존재하면 사용
.sessionCreationPolicy(SessionCreationPolicy.Stateless) //생성x, 존재 x
11.API-SessionManagementFilter、ConcurrentSessionFilterの認証
SessionManagementFilterは、まず古いユーザー・セッションの期限切れポリシーを設定し、次に
ConcurrentSessionFilterは、各リクエストのセッションが期限切れであるかどうかを確認します.確認後のログアウトとエラーページ
session.expireNow()
前のユーザーが既に存在する場合、SessionManagementFilterはexpiredNow()を使用して前のユーザーセッションを期限切れにします.
以前のユーザーが要求を試みた場合、ConcurrentSessionFilterはセッションを行います.isExpired()によるログアウト
12.API-パーミッション設定と式の承認
session.isExpired() == true
http.antMatchers(”/user/**”).hasRole(”USER”)
.antMatcher("/shop/**") // url에 접근시 인증 없으면 모든페이지 인증
.authorizeRequests()
.antMatchers("/shop/login","/shop/user/**").permitAll() //이 페이지 모든 접속 가능
.antMatchers("/shop/mypage").hasRole("USER") // 페이지 유저만 가능
.antMatchers("/shop/admin/pay").access("hasRole('ADMIN')") // ADMIN만 가능
.antMatchers("/shop/admin/**").access("hasRole('ADMIN') or hasRole('SYS')") //ADMIN or SYS
.anyRequest().authenticated(); // 나머지 요청은 인증 처리
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("user")
.password("{noop}1111").roles("USER");
auth.inMemoryAuthentication().withUser("sys")
.password("{noop}1111").roles("SYS","ADMIN");
auth.inMemoryAuthentication().withUser("admin")
.password("{noop}1111").roles("ADMIN","USER","SYS");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/user").hasRole("USER")
.antMatchers("/admin/pay").hasRole("ADMIN")
.antMatchers("/admin/**").access("hasRole('ADMIN') or hasRole('SYS')")
.anyRequest().authenticated();
http
.formLogin();
}
13.認証/承認API-例外処理と要求キャッシュフィルタ
@PreAuthorize(”hasRole(’USER’)”)
:最後に呼び出されたクラス、つまり子供が異常を起こしたのは、このインターセプターの前にあるFilterSecurityIntercepter
try catch文でインタフェースを囲み、インタフェースに異常が投げ出されるとフィルタがキャプチャExceptionTranslationFilter
**ExceptionTranslationFilter**
AuthenticationException
コールAutheticationEntryPoint
ログインページに移動し、要求前にメッセージ、ヘッダ値をセッションに入れ、必要に応じて使用AutheticationEntryPoint
AccessDeniedExecption
提供インタフェース実施箇所の異常処理AccessDeniedHandler
で承認例外が発生した(認証されていないユーザは匿名ユーザであるため)FilterSecurityIntercepter
Handlerに行くのですが匿名または非会員AccessDeniedExecption
行きます.AuthenticationException
セキュリティコンテキストをnullに初期化AuthenticationException
ログインページを譲るReference
この問題について(Spring Security-3日目の整数), 我々は、より多くの情報をここで見つけました https://velog.io/@eldehd9898/Spring-Security-정수원-3일차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol