0

私は次のスタックで遊んでいます:

  • ワイルドフライ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/

何か案が?

4

1 に答える 1

0

この問題は解決できましたが、本当の原因を見つけることができませんでした。解決策は、openshift のようなパブリック IP を持つ別のサーバーに ear をデプロイすることでした。

于 2014-06-08T01:44:44.200 に答える