English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Spring security設定プロジェクト

Spring FrameworkがSpring 3.1にJava設定サポートが追加されました。Spring Securityでは、Java設定がSpring Securityに追加されました。 3.2中で、Spring Securityの設定を行うことができます。 XMLを一行も書かずに。

ここでは、Springの実装を実現する例を生成します。安全性はXMLを使用せずに設定されます。以下のステップを含みます。

ステップ1

最初のステップはSpring SecurityのJava設定の作成です。以下に簡単な基本的なJava設定の例を示します。

WebSecurityConfig.java

package com.w3codebox;
import org.springframework.context.annotation.*;
//import org.springframework.security.config.annotation.authentication.builders.*;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.*;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@EnableWebSecurity
@ComponentScan("com.w3codebox")
public class WebSecurityConfig implements WebMvcConfigurer {
    
    @Bean
    public UserDetailsService userDetailsService() throws Exception {
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(User.withDefaultPasswordEncoder().username("w3codebox").
        password("java123").roles("USER").build());
        return manager;
    }
    
    protected void configure(HttpSecurity http) throws Exception {
                
        http
        .antMatcher("/)                               
        .authorizeRequests()
            .anyRequest().hasRole("ADMIN")
            .and()
        .httpBasic();
    }
}

この設定では、 springSecurityFilterChain のServletフィルタです。 責任があります。アプリケーションURLを保護し、提出されたユーザー名とパスワードを確認し、ログインフォームにリダイレクトします。

上記のJava設定は、私たちのアプリケーションに対して以下の操作を実行します。

各URLに対して認証を要求 ログインフォームを作成 ユーザーがフォームベースの認証を使用して認証を行うことを許可 ログアウトを許可 CSRF攻撃を防ぐ 安全タイトル統合など

ステップ2

今、私たちは戦略に以下を登録します springSecurityFilterChain 登録を行うために、Spring Securityは必要な拡張を行うための基底クラスAbstractSecurityWebApplicationInitializerを提供します。

Spring MVCアプリケーション用に、SecurityWebApplicationInitializerは以下の通りです。

SecurityWebApplicationInitializer.java

package com.w3codebox;
import org.springframework.security.web.context.*;
public class SecurityWebApplicationInitializer
    extends AbstractSecurityWebApplicationInitializer {
}

このコードは、私たちのアプリケーションの各URLにspringSecurityFilterChainを登録します。

ステップ3

現在、WebSecurityConfigを私たちの既存のApplicationInitializerにロードし、getRootConfigClasses()メソッドに追加します。

MvcWebApplicationInitializer.java

package com.w3codebox;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class MvcWebApplicationInitializer extends
        AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { WebSecurityConfig.class };
    }
    @Override
    protected Class<?>[] getServletConfigClasses() {
        // TOdo Auto-生成されたメソッドスタブ
        return null;
    }
    @Override
    protected String[] getServletMappings() {
        return new String[] { "/"};
    }
}

ステップ4

WebSecurityConfigurerAdapter このクラスはconfigure(HttpSecurity http)メソッドを提供しており、以下のデフォルト設定を含んでいます。デフォルトの定義は以下の通りです。

protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.httpBasic();
}

指定されたXMLに似ています。

<http
<intercept-url pattern="/**" access="authenticated"/>
<form-login />
<http-basic />
</http>

このメソッドは以下の操作を実行します。

ユーザーが提出するすべてのリクエストがユーザー認証を要求されることを確保します ユーザーはフォームベースのログインを使用して認証を行うことができます ユーザーはHTTP Basic認証を使用して認証を行うことができます

ステップ5ステップ

ユーザーからのリクエストを処理するコントローラーを作成します。

HomeController.java

package com.w3codebox.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class HomeController {
    
    @RequestMapping(value="/", method=RequestMethod.GET)
    public String index() {
        
        return "index";
    }
}

私たちはビュー(.jsp)ページを持っています index.jsp 、以下のソースコードを含んでいます。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Home Page</title>
</head>
<body>
Welcome to home page!
</body>
</html>

私たちの完全なプロジェクトは以下の通りです。

出力:

コントローラーには動作が1つしかなく、本当にのユーザーのみがアクセスできます。したがって、アプリケーションを実行すると、ログイン証明書の入力を求められます。以下に結果を出力します。

これは SpringSecurityが提供するデフォルトのログインページページ、私たちは作成していません。私たちは独自のログインページを作成し、アプリケーションに設定を使用して構成できます。次のトピックでその操作を行います。

今、アプリケーションリソースにアクセスするためにログイン証明書を提供します。SpringSecurityはユーザーの証明書を検証し、ユーザーの本物性を確保します。

何が起こるか見てみましょう。エラーレコードを入力するとどうなるか。

ログインボタンをクリックすると、 BadCredentials (エラーレコード)エラー。

今、以下を使用して 正しい証明書でログインしました。/strong>

このパスワードが一致し、ホームページ(index.jsp)が表示されました。