序文
春のセキュリティは学ぶためにいくつかのモジュールの春の家族のバケツの中で最も急なカーブの一つ、読むことを学ぶのは非常に始まり、そして後に捨てられたに見えた回でいくつかの混乱しなければなりません。
いくつかの時間前には再びそれを拾うまで、インターネット上のこの時間は、多くの情報を見つけるために、そして最終的に春のセキュリティの一定の理解を持って、それを理解することがわかっは実際にはそれほど難しいことではありません。
ここでは、ソートの簡単な概要です。
単純な認証プロセス
多くの人々は、単にWebアプリケーションを書くことを学ぶために始めたときに、次の方法この認定を使用している必要があります。
- ユーザーのアカウントのパスワードのための情報ページのフロントエンドとバックエンドへのPOSTリクエストによって同様の後
- データベースのクエリサーバー格納されているユーザ情報をユーザのアカウントのパスワードやその他の情報を取得するための後端
- 比較データベースアカウントのパスワード情報から、フロントエンドユーザ情報転送
- これは、トークントークンSeesionを保存するために同じことを生成し、クライアントに返さ
- フロントエンドを保存した後、彼の身元を証明するために、後続のリクエストでこのトークントークンキャリーを取得します
この認証方法は非常に簡単ですが、春のセキュリティにおける認証プロセスは、それはそうではないのですか?しかし、春のセキュリティは、より統一抽象インタフェースを介して、このような認証プロセスを実現しています。
春のセキュリティ
簡単な認証プロセスの前には、それは別のエンティティとして抽象的に何かすることができ、これらのエンティティであって、春のセキュリティ対応するオブジェクトで見つけることができます:
アカウントのパスワードとユーザーが入力した他の情報、実際には、春のセキュリティに対応したこれらの事のユーザ認証情報は、つまり
Authentication
、また、ユーザ認証を保存するために使用することができ、ユーザ認証情報を保存するだけで、オブジェクト、しかし、認証春のセキュリティオブジェクトユーザーの詳細については成功した後、データベースから取得します。public interface Authentication extends Principal, Serializable { Collection<? extends GrantedAuthority> getAuthorities(); // 用户权限 Object getCredentials(); // 用户认证信息 Object getDetails(); // 用户详细信息 Object getPrincipal(); // 用户身份信息 boolean isAuthenticated(); // 当前 Authentication 是否已认证 void setAuthenticated(boolean isAuthenticated); }
ただ、ユーザ認証情報を提供することで、ユーザが正当であるかどうかを判断するために不十分であることが多いので、我々は通常、サーバー上に格納されているユーザ情報を取得するには、いくつかの手段を必要とするだけでなく、店舗の利用者情報を何らかの手段が必要これらは言葉に春のセキュリティで対応
UserDetailsService
し、UserDetails
これら二つのオブジェクト。public interface UserDetailsService { UserDetails loadUserByUsername(String username) throws UsernameNotFoundException; } public interface UserDetails extends Serializable { Collection<? extends GrantedAuthority> getAuthorities(); String getPassword(); String getUsername(); boolean isAccountNonExpired(); boolean isAccountNonLocked(); boolean isCredentialsNonExpired(); boolean isEnabled(); }
ユーザーがサーバーに保存されている認証情報とユーザ情報を提供した後、我々はいくつかの方法でこれらの二つの情報を比較する必要があり、春のセキュリティでのユーザ認証に対応した情報を対象とする。この効果はある
AuthenticationManager
の主題。Authentication authenticate(Authentication authentication)throws AuthenticationException;
ユーザ認証情報と、別の後の方法の有効性の多種多様の眺め、春のセキュリティは、拡張インタフェースより簡単に私たちを提供
AuthenticationProvider
してProviderManager
AuthenticationManagerが達成デフォルト。使用時には、私たちはしばしばのみ実装する必要がありますAuthenticationProvider
十分。public interface AuthenticationProvider { Authentication authenticate(Authentication authentication) throws AuthenticationException; boolean supports(Class<?> authentication); }
これは、AuthenticationProvider方法で見ることができ
authenticate
返しAuthentication
認証は、このオブジェクトは、多くの場合、ユーザーの詳細情報が保存されますされている場合、オブジェクトを。有効性を介してユーザーの認証情報は、私たちは多くの場合、サーバーに認証情報を保存したり、トークン生成する必要がある場合には、春のセキュリティにオブジェクトによって格納された認証情報がでている
SecurityContext
とSecurityContextHolder
、これらの2つのオブジェクトが、SecurityContextがででセーブ認証認証オブジェクト、SecurityContextHolderたSecurityContextは、当社の使用を容易にするために、現在のスレッドのコンテキストを保存します。public interface SecurityContext extends Serializable { Authentication getAuthentication(); void setAuthentication(Authentication authentication); } public class SecurityContextHolder { public static SecurityContext getContext(); public void SecurityContext setContext(); }
フィルタスプリングセキュリティは、に基づいて実施するだけでなく、要求はスプリングセキュリティ特定の処理ロジックに到達する前に、その後の使用の態様を生成されたフィルタにおけるユーザ情報の認証を完了することができ、従って、各要求にスレッドを割り当てる傾向がされたSecurityContext 。
ここに添付していますアーキテクチャの概要-春のセキュリティ(A)|里芋のチャンネルソース-純粋なソース解析ブログマップの、オブジェクト間の関係の良い説明は:
春のセキュリティは非常に複雑に見えますが、核となるアイデアとその前に簡単な認証プロセスはまだ同じであるが、それは、見ることができます。しかし、春のセキュリティは、抽象化のプロセスの重要な部分の一つであるが、また、対応する拡張インターフェースを提供します。
私たちが使用した場合、彼らは彼らのAuthenticationProviderは、ユーザ認証情報の有効性に自分のUserDetailsServiceと認証を使用実現するために、特定のユーザーの認証情報を保存するために彼らの認証を達成するために保留ユーザー情報を取得するために彼らのUserDetailsServiceとUserDetailsを実現することができます。
もちろん、春のセキュリティは、より多くの機能がありますが、基本的なプロセスの理解の一定量を、コンテンツのフォローアップは、それがより簡単に習得することができます。
エピローグ
実際には、春のセキュリティにも春のセキュリティのOAuth2と春のセキュリティJWTを見て離れて外に、一緒にこのブログを感じるし、まとめたが、読んで、唯一見つけるために読んで、レイプ、春のセキュリティの一部を考えているかもしれ春にどのように、それほど明確断続的になってからセキュリティのOAuth2。
ただ、春のセキュリティと春のセキュリティのOAuth2の関係アウトだけでラフなものを書き、詳細は精査する必要があり、まだ続いて、そのため、右または将来的には、左@ _ @