Spring Security-3日目の整数


8.API-AnonymousAuthenticationFilterの認証

  • 匿名ユーザ認証処理フィルタ
  • 匿名ユーザと認証ユーザを区別するため
  • 画面で認証を実施するか否かは、isAnnonymous()isAuthenticated()使用
  • 認証対象をセッションに保存しない
  • 9.認証API-同時セッション制御/セッション固定保護/セッションポリシー


    同時セッション
  • 許可されている最大セッション数の設定(例えば1)
  • 2名以上のプレイヤー登録
  • 2つのケースがある.
  • 期限切れ前のユーザセッション
  • 現在のユーザ認証に失敗
  • 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-パーミッション設定と式の承認

  • 宣言方式
  • URL
  • session.isExpired() == true
  • Method
  • http.antMatchers(”/user/**”).hasRole(”USER”)
  • public void user(){ System.out.println(”user”) }
  • ダイナミックモード
  • URL
  • Method
  • 宣言URL方式
    .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(); // 나머지 요청은 인증 처리
  • 注意:設定時は具体的に後に広範囲の経路で順次処理する
  • 式#シキ#
  • anonymous()匿名ユーザーのみUSER使用許可
  • hasRole(String):RoleUSERがあれば、Roleを外し、Roleを一緒に置いてはいけない(Prepix X)
  • hasAuthority(String):Prepix許可
  • hasAny~~~:1役のみ許可
  • @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();
    
        }
  • 上にメモリを付与その後もダイナミックにテレビに出演した
  • Matcherはその後も動的にコーナージョイントを接続
  • 13.認証/承認API-例外処理と要求キャッシュフィルタ

  • @PreAuthorize(”hasRole(’USER’)”):最後に呼び出されたクラス、つまり子供が異常を起こしたのは、このインターセプターの前にあるFilterSecurityInterceptertry catch文でインタフェースを囲み、インタフェースに異常が投げ出されるとフィルタがキャプチャ
  • ExceptionTranslationFilter
  • **ExceptionTranslationFilter**
  • 認証異常処理
  • AuthenticationExceptionコール
  • ログインページの移動、401エラーコードの転送等
  • ダイレクトインターフェースカスタマイズ可能
  • 認証異常が発生しないように要求情報を保存
  • ユーザーがホームページにアクセスしてもログインしていないため、拒否されるとログインページに移動します.ホームページを保存してログインしている場合は、すぐにホームページに移動します.
  • キャッシュインタフェースインプリメンテーションを要求する役割を果たす-ユーザが要求する前の情報をセッションに保存し、SavedRequestに格納された値をセッションに保存する
  • SavedRequest:ユーザが以前に要求した要求パラメータ値、当時のヘッダ値(実際の記憶値)を記憶する
  • 整理:・呼び出しAutheticationEntryPointログインページに移動し、要求前にメッセージ、ヘッダ値をセッションに入れ、必要に応じて使用
  • AutheticationEntryPoint
  • 認可異常処理
  • AccessDeniedExecption提供インタフェース実施箇所の異常処理
  • ユーザーが認証なしに/userリソースにアクセスしていると仮定
  • AccessDeniedHandlerで承認例外が発生した(認証されていないユーザは匿名ユーザであるため)
  • FilterSecurityIntercepterHandlerに行くのですが匿名または非会員AccessDeniedExecption行きます.
  • 認証例外になりやすい
  • AuthenticationExceptionセキュリティコンテキストをnullに初期化AuthenticationExceptionログインページを譲る
  • その前に、DefaultSavedRequestオブジェクトに情報を保存し、セッションに保存する.HttpSessionRequestCacheが演じます
  • 次のユーザは認証を受けるが、権限がなければ例外を発動し、順番に進めば通常/拒否する.