2016-04-16 10 views
0

私はSpring Securityで初めての試みをしており、本当にそのようなタスクに苦しんでいます。私はデフォルトのWebページを持っています。これはデフォルトでは認証されていないはずです。 PreAuthorizedアノテーションで保護したいと思っています。基本的な考え方は、デフォルトの「ログインページへのリダイレクト」を無効にしたいが、Spring Securityのメソッドセキュリティ複合体を操作する機会はまだあるということです。Spring Securityはhttpsecurityを設定します

私はのように見えた、Javaの設定を使用しています:

@Configuration 
@EnableWebSecurity 
public class SpringWebSecurityConfig extends WebSecurityConfigurerAdapter{ 
    @Override 
    public void configure(WebSecurity web) throws Exception { 
     web.ignoring().antMatchers("/res/**"); // #3 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.antMatcher("/**").authorizeRequests().anyRequest().permitAll();   
    } 
} 

を、私はこの上に座ってきた(この時点で私のすべてのコールが許可されなければならないことを知っている(または理解しているようです)過去2日間、そして明確にアイデアがなくなった)。

私は確保したい

[コントローラのメソッドは、次のとおりです。

@PreAuthorize("hasRole('ADMIN')") 
@RequestMapping(value="/admin", method = RequestMethod.GET) 
public String getAdminPage(Model model){ 
    return "admin"; 
} 

私は「/ **/admin」を追加して、特定のURLへの呼び出しを許可するantMatcherを使用できることを知っているが、

  1. ルート(およびその他のランダムコントローラのマッピング)の[ログインページに移動]を無効にします。
  2. ajaxドロップダウン(または何か)から手動でajaxベースの認証を行います。
  3. ランダムに非自認のユーザーがコントローラに@PreAuthorizedを持つページをバンプするとき、そのときだけ、リダイレクトする必要があります。

UPD:基本的な質問は、アクセス拒否シナリオでのみリダイレクトログインページを呼び出すことで、基本的なサイトビューとコールの匿名の役割を許可します。

答えて

0

私自身の質問に答える(見た目はきれいではないかもしれない)。

  1. それは文句を言わないすべてのページにログインするために頼むようにするには、春のセキュリティHTTPセキュリティを設定できるの:

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
    
    http.antMatcher("/**").authorizeRequests().anyRequest().permitAll(); 
    
  2. 方法セキュリティ(事前認証(「hasRoleも( 『ADMIN』)を」有効にするには)と電気ショック療法)、あなたは注釈を追加する必要があります:あなたはHttpSecurity OBJに追加する必要が

    @EnableGlobalMethodSecurity(prePostEnabled = true) 
    

た後電気ショック療法「アクセスが拒否されましたし、電気ショック療法」(他のいくつかのstackoverflowの質問スレッドでこれを見つけた)の例外をキャッチするために何か:

http.exceptionHandling().authenticationEntryPoint(new AuthenticationEntryPoint() { 

      @Override 
      public void commence(HttpServletRequest request, HttpServletResponse response, 
        AuthenticationException authException) throws IOException, ServletException { 
       if (authException != null) { 
        response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); 
        response.getWriter().print("Unauthorizated...."); 
       } 
      } 
     }); 

そして今、あなたは@PreAutherizedであなたのコントローラおよび他のコンポーネントを確保することができます。これが誰かを助けることを願っています。

しかし、ユーザーが未承認で一部の事前承認済みページにアクセスしようとすると、上記の例外ハンドラが呼び出され、「Unauthorized ...」というメッセージが返されます。しかし、ユーザーが承認され、事前承認された役割を持つページを試してみると、デフォルトの403アクセス拒否が表示されます。

関連する問題