私は次のスタックで遊んでいます:
- ワイルドフライ8.1.0
- プライムフェイス 5
- オムニフェイス 2.0
- ピケットリンク 2.5.2
- jsf2.2
- javaee7
- java7
私は耳のプロジェクトを持っています。
次に、ユーザーの役割を確認するための単純な Web フィルターを作成しました。
@WebFilter(urlPatterns = MemberProtectionFilter.REALM_BASE_URI + "/*")
public class MemberProtectionFilter implements Filter {
public static final String REALM_BASE_URI = "/pages/member";
@Inject
private Instance<Identity> identityInstance;
@Inject
private Identity identity;
private Identity getIdentity() {
return this.identityInstance.get();
}
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
boolean isAuthorized = identity.isLoggedIn();
PicketlinkAccount account = (PicketlinkAccount) getIdentity()
.getAccount();
if (isAuthorized && account != null
&& account.getUser().hasRole("member")) {
chain.doFilter(httpRequest, httpResponse);
} else {
forwardAccessDeniedPage(httpRequest, httpResponse);
}
}
}
問題なくwildflyにデプロイしました。
ここで、アプリケーションをルート コンテキスト / にデプロイする必要があります。そこで、wildfly の管理インターフェイスのウェルカム コンテンツを削除し、ear プロジェクトの pom.xml webModule の定義を次のように変更しました。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>${version.ear.plugin}</version>
<configuration>
<version>6</version>
<defaultLibBundleDir>lib</defaultLibBundleDir>
<modules>
<webModule>
<groupId>com.czetsuya</groupId>
<artifactId>picketlink-web</artifactId>
<contextRoot>/</contextRoot>
</webModule>
</modules>
<fileNameMapping>no-version</fileNameMapping>
</configuration>
</plugin>
今度はログイン後、ID は正しく挿入されますが、identity.isLoggedIn() は常に false と評価されます。また、ログイン後とフィルターでIDのhashCodeを確認しましたが、それらは同じでした。同じインスタンスですが、なぜ WebFilter でログアウトするのでしょうか。さらに、フィルターなしで別のページに移動すると、identity.isLoggedIn() が再び true になります。
私はローカルホストで作業しているので、ルートコンテキストはhttp://localhost:8080/
何か案が?