2016-09-15 6 views
3

私のアプリケーションで春のセキュリティを使用しています。ユーザーが/ privatePages/*にアクセスしたい場合は、認証のためのログイン画面が表示されます。これは正常に動作します。この式はTrueを与えるように私は、認証が実行されるようになりました見ることができます春のセキュリティ自動認証が機能しない

Authentication authentication = new UsernamePasswordAuthenticationToken("SAMPLE", "SAMPLE", getAuthority()); 
//authentication.setAuthenticated(true); 
SecurityContextHolder.getContext().setAuthentication(authentication); 

public Collection<GrantedAuthority> getAuthority() { 
    Collection<GrantedAuthority> grantedAuthorities = new ArrayList<GrantedAuthority>(); 
    GrantedAuthority grantedAuthority = new GrantedAuthority() { 
     public String getAuthority() { 
      return "ROLE_RequiredRole"; 
     } 
    }; 
    grantedAuthorities.add(grantedAuthority); 
    return grantedAuthorities; 
} 

:私のコントローラで私はこのような何かをしたので、私はゲストアクセスとして何かをしたい私はしかし

SecurityContextHolder.getContext().getAuthentication().isAuthenticated() 

/privatePages/somePage.jspにアクセスできません。それでも私はログインページにリダイレクトされます。何か不足していますか?

UPDATE

<http pattern="/privatePages/**" auto-config="true" use-expressions="true" authentication-manager-ref="myManager" create-session="never"> 
    <session-management invalid-session-url="/privatePages/login" /> 
    <intercept-url pattern="/privatePages" access="hasRole('RequiredRole')"/> 
    <intercept-url pattern="/privatePages/" access="hasRole('RequiredRole')"/> 
    <form-login 
     login-page="/privatePages/login" . . . . 
+0

セキュリティ設定で '/ privatePages/*'に 'http.authorizeRequests()。antMatchers("/privatePages/* ")のようなアクセス権があれば、hasAnyRole("あれは何でもいい); '/ privatePages/...'という接頭辞のすべてのURLにルールを適用する代わりに、認証が必要なルールを設定した後で '/ privatePages/somePage.jsp'を' anonymous() 'スコープにする必要があります。 – px06

+0

資格情報なしでログインしたい –

答えて

1

あなたはルールが接頭辞localhost:8080/privatePages/...ですべてのURLに適用される、ということを意味している/privatePages/**上のルールを作っている、とそのルールにあなたには、いくつかの並べ替えを強制している場合認証が必要な場合は、その要求がセキュリティフィルタを通過してからそのステージに到達するため、コントローラで何をするかにかかわらず質問します。

<http auto-config="true"> 
    <intercept-url pattern="/privatePages" access="ROLE_RequredRole" /> 
    <intercept-url pattern="/privatePages/somePage.jsp" access="ROLE_ANONYMOUS" /> 
</http> 

ここでは、それは役割が任意の認証を必要としないことを意味ROLE_ANONYMOUSを利用している:あなたのSecurityConfigで

は、次のことをやってみてください。詳細は、hereを参照してください。

+1

ROLE_ANONYMOUSを使わずに済ませました。私は '/ privatePages/**'を削除しなければなりませんでした。 –

+1

@NoahMartinええ、前に言ったように'**'をパスの前に置くと、それ以降のすべてのパスも同じルールに含めるようになります。 – px06

関連する問題