2016-04-15 14 views
0

カスタムページのみを保護するため、または@PreAuthorized注釈で作業するために、Springセキュリティ(Java設定を使用)を設定する方法はありますか?スプリングセキュリティのセキュリティ保護されたカスタムページ

私は/adminなどのカスタムコールをセキュリティで保護したいと考えています(セキュリティ設定のすべてのコールをハードコーディングせずに)。これはコントローラに上記のアノテーションで設定されていますが、まったく認証。

答えて

1

私にとってはうまくいくものを見つけるのに苦労しました。それはトリックを行い、また非常に読みやすいです。

package com.your.package.config; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; 
import org.springframework.security.config.annotation.web.builders.HttpSecurity; 
import org.springframework.security.config.annotation.web.configuration.*; 

@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter 
{ 
    @Override 
    protected void configure(HttpSecurity http) throws Exception 
    { 
     http.authorizeRequests() 
       .antMatchers("/admin/**").access("hasRole('ADMIN')") 
       .antMatchers("/**").permitAll() 
       .anyRequest().authenticated() 
       .and() 
       .formLogin(); 
    } 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception 
    { 
     auth.inMemoryAuthentication().withUser("user").password("password").roles("USER"); 
    } 
} 

同じページにまだない人のための

@Override 
protected void configure(HttpSecurity http) throws Exception 
{ 
    http.authorizeRequests() 
      .antMatchers("/admin/**").access("hasRole('ADMIN')") 
      .antMatchers("/**").permitAll() 
      .anyRequest().authenticated() 
      .and() 
      .formLogin(); 
} 

フルクラスformLogin()メソッドを呼び出していないノートはデフォルトの「/ログインは」404エラーを返すになるだろう。

0

私はこれがあなたの質問に答えるかどうかわからないですが、あなたがそうのように、特定のページを識別し、セキュリティの設定で他の人を無視するアリマッチャーを使用することができます。

.antMatchers("/**").permitAll() 

または

.antMatcher("/admin/**") 
.authorizeRequests() 
.anyRequest().authenticated() 
+0

http://stackoverflow.com/questions/35633194/spring-security-configuration-for-basic-authentication-and-form-login/35634692#35634692ここでは2つの作業例を見つけることができますが、おそらくそれが役に立ちます。 – Andrei

+0

返事をありがとう。 2番目のバージョンは必要なものになっていますが、これはハードコード( "/ admin/**")のほうがはるかです。 終了結果はシステムの「反対側」から出てきました。コントローラーの定義には @PreAuthorize( "hasRole( 'ROLE_ANONYMOUS')") が追加されました。私は余分なセキュリティが必要なものから。 –

+0

Javaの設定クラスでハードコードされた値を完全に削除したい場合は、ADMIN_PATH = "/ admin /"のような定数を持つ抽象クラスを定義し、コントローラとセキュリティ設定の両方で使用するか、プロパティー・ファイル内にあります。 – Andrei