スプリングネットワークセキュリティの概要

17117 ワード

この文章はSpring MVCプロジェクトに基づいている.
xml設定を使用します.
ソース:コード学習を使用したSpring Webプロジェクト

フィルタとインタフェース


スプリング安全性はフィルタと防振器で動作します.
どちらもrequestを中間でフィルタします.
違いは
  • フィルタは、スプリングに関係のないサーバリソースです.
  • インターフェースはスプリングコンテキストで動作する.
  • 様々な方法で
    認証が可能です.

    セキュリティ設定


    pom.xmlに次の依存性を追加します.
    <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core -->
    		<dependency>
    		    <groupId>org.springframework.security</groupId>
    		    <artifactId>spring-security-core</artifactId>
    		    <version>5.0.6.RELEASE</version>
    		</dependency>
    		<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->
    		<dependency>
    		    <groupId>org.springframework.security</groupId>
    		    <artifactId>spring-security-config</artifactId>
    		    <version>5.0.6.RELEASE</version>
    		</dependency>
    		
    		<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
    		<dependency>
    		    <groupId>org.springframework.security</groupId>
    		    <artifactId>spring-security-web</artifactId>
    		    <version>5.0.6.RELEASE</version>
    		</dependency>
    		<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-taglibs -->
    		<dependency>
    		    <groupId>org.springframework.security</groupId>
    		    <artifactId>spring-security-taglibs</artifactId>
    		    <version>5.0.6.RELEASE</version>
    		</dependency>
    次はsecurity-contextxmlを生成します.
    生成後、名前空間でセキュリティを確認します.
    次にbeansラベルを次のように置き換えます.
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:security="http://www.springframework.org/schema/security"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
    		http://www.springframework.org/schema/beans
    		http://www.springframework.org/schema/beans/spring-beans.xsd" >
    今でも設定の準備をしています.
    フィルタをスプリング動作に参加させるため、web.xmlにフィルタを追加します.
    	<!-- 스프링 시큐리티가 스프링 동작에 관여하도록 필터 설정 -->
    	<filter>
    		<filter-name>springSecurityFilterChain</filter-name>
    		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    	</filter>
    	
    	<filter-mapping>
    		<filter-name>springSecurityFilterChain</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
    プロジェクトを実行すると、springSecurityFilterChainという名前のスペースが見つからないというエラーが発生します.security-context.xmlに関する情報をspringにあげなかったからです.
    web.xmlのcontext-paramのsecurity-context.xmlを追加します.
    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>
    		/WEB-INF/spring/root-context.xml
    		/WEB-INF/spring/security-context.xml
    		</param-value>
    	</context-param>
    security-context.xmlに次の設定を追加します.
    <!-- 시큐리티의 시작지점 지정 -->
    <security:http>
      
      <security:form-login />
      
    </security:http>
    
    <!-- 스프링 시큐리티가 동작하려면 AuthenticationManager 라는 인터페이스가 필요함 -->
    <security:authentication-manager>
      
    </security:authentication-manager>

    セキュリティ動作の確認


    基本的なスプリングの安全設定が完了しましたので、動作を確認してみましょう.
    まず3つのURIをマッピングするコントローラを作成します.
    @RequestMapping("/sample/*")
    @Controller
    public class SampleController {
    	
    	@GetMapping("/all")
    	public void doAll() {
    		System.out.println("모든 사람 접근 가능");
    		
    	}
    	
    	@GetMapping("/member")
    	public void doMember() {
    		System.out.println("member 만 접근 가능");
    	}
    	
    	@GetMapping("/admin")
    	public void doAdmin() {
    		System.out.println("admin 만 접근 가능");
    	}
    
    }
    3つのURIにはそれぞれ異なるアクセス権があります.
    マッピングされたjspに、権限に一致する簡単なテキストを画面に表示させます.jsp生成が簡単すぎるので省略します.

    認証と承認


    Springsecurityは、認証と承認を支援します.
    認証は自分を証明することです.
    認められるのは他人に資格を与えられることだ.
    話が難しいので、例を挙げます.
    あなたはあるコミュニティのユーザーです.
    いったん中に入って赤字を書くと、ログインします.
    ログインする行為はあなた自身を証明することです.これは認証です.
    あなたの権限は普通のプレイヤーなので、文章を登録/修正/削除することができます.
    ただし、管理者ではないため、他の人が書いた特定の投稿を削除したり、
    プレイヤーのipをブロックできません.
    ある論理や人に普通のプレイヤーとして「認められる」ことで、その権限によって制限できる行為です.

    スプリング内部のシンプルな構造。


    この写真の中で一番上のAuthentication ManagerとProviderManager
    そしてAuthenticationProviderを見てみましょう
    認証担当のAuthentication ManagerはSpring Securityで最も重要です.AuthenticationManagerは、さまざまな方法で認証を処理することを目的としています.
    ProviderManagerは、認証の処理をAuthenticationProviderに委任します.
    AuthenticationManagerは、実際の認証操作を実行します.
    認証された情報とともに、認証された情報を渡すことができます.
    この操作は、UserDetailsServiceというインタフェースのインプリメンテーションによって実行されます.
    ユーザーの情報とその権限を返します.
    開発者がスプリングのセキュリティをカスタマイズする方法は2つあります.
    直接実施
  • 認証プロバイダ
  • 実施
  • ユーザ詳細サービス
  • 2つの方法に分けられ、通常は後者を使用します.
    新しいプロトコルまたは認証実施形態を直接実施する場合、電子的にカスタマイズされる.
    次に、ログインとログアウトの処理について学習します.