Spring Security | Spring Securityとは | Java Configuration
Spring Security 3.2は、Spring 3.1で追加されたJava Configurationをサポートします。XMLなしでnamespace相当の設定を記述でき、コンパイル時チェックとリファクタリングが容易になります。
Hello WorldをJava Configurationへ置き換える
web.xmlでXmlWebApplicationContextの代わりにAnnotationConfigWebApplicationContextを使用します。
<context-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>sample.spring.security.MySpringSecurityConfig</param-value>
</context-param>
コンテナの実装
@EnableWebSecurity
public class MySpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and()
.formLogin();
}
@Autowired
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("devkuma").password("1234").roles("USER");
}
}
Spring Securityを有効化する
AnnotationConfigWebApplicationContextが読み込むクラスへ@EnableWebSecurityを付与します。このアノテーションはWebSecurityConfigurationをimportし、グローバル認証を有効化します。
Spring Securityを設定する
WebSecurityConfigurerAdapterを継承し、configure(HttpSecurity)などをオーバーライドします。HttpSecurityはXMLの<http>要素に対応します。
authorizeRequests()でURL認可設定を開始します。and()はHttpSecurityを返し、メソッドチェーンを続けます。formLogin()はフォーム認証を有効化します。
この例は次のXMLに相当します。
<sec:http>
<sec:intercept-url pattern="/login" access="permitAll" />
<sec:intercept-url pattern="/**" access="isAuthenticated()" />
<sec:form-login />
<sec:logout />
</sec:http>
ユーザー情報を設定する
AuthenticationManagerBuilderはAuthenticationManagerの定義を支援し、UserDetailsServiceをメソッドチェーンで設定できます。Beanを直接定義することもできます。
@Bean
public UserDetailsService userDetailsService() {
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(User.withUsername("hoge").password("HOGE").roles("USER").build());
return manager;
}