ここなどのさまざまな場所で提供されている指示に従って、webapp で宣言型の J2EE フォームベースの認証を使用しています: http://java.dzone.com/articles/understanding-web-security
j_security_check によるログインでは、レルム内のすべてのユーザーが認証 (ログイン) できるように見えますが、ロールはチェックされません。認可チェックは、ユーザーがセキュリティ上の制約のあるページにアクセスした場合にのみ実行されるようです。
したがって、私のアプリでは、ユーザーは領域にいるため正常にログインできますが、安全なページにアクセスすると、醜い「エラー 403: AuthorizationFailed」メッセージが表示されます。
認証を特定の役割を持つユーザーに制限する方法はありますか? または、ユーザー領域に必要な役割を持つユーザーのみが含まれていることを確認する必要がありますか?
コードに関しては、web.xml に次の宣言があります。
<login-config>
<auth-method>FORM</auth-method>
<realm-name>Simple</realm-name>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/loginerror.jsp</form-error-page>
</form-login-config>
</login-config>
ただし、必要な役割については何も述べていないため、login.jsp に移動するすべてのユーザーは、連なりであれば正常にログインできます。
次に、ユーザーが url-pattern に一致するページのいずれかにアクセスすると、次のようになります。
<security-constraint>
<display-name>Authorised</display-name>
<web-resource-collection>
<web-resource-name>Authenticated and Authorised Resources</web-resource-name>
<url-pattern>/secure/*</url-pattern>
<http-method>PUT</http-method>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>simpleWebAppUser</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>INTEGRAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
それは役割がチェックされるときです。
ロール「simpleWebAppUser」はアプリケーション全体であり、ログインを成功させる前に、ユーザーがこのロールを持っていることを確認したいと思います。
Windows XP/2000/2003 で、O/S ユーザー リポジトリを使用するように構成された WebSphere 7.0 を使用しています。