0

我正在玩以下堆栈:

  • Wildfly8.1.0
  • 素面 5
  • 全方位2.0
  • 纠察队 2.5.2
  • jsf2.2
  • javaee7
  • java7

我有一个耳朵项目。

然后我创建了一个简单的网络过滤器来检查用户的角色:

@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管理界面中的welcome-content,并将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>

这次登录后,虽然身份被正确注入,但 identity.isLoggedIn() 总是被评估为假。此外,我在登录后和过滤器中检查了身份的 hashCode,它们是相同的。所以它是同一个实例,但是为什么要在 WebFilter 中注销呢?此外,当我转到另一个没有过滤器的页面时,identity.isLoggedIn() 再次为真。

我正在本地主机上工作,所以根上下文是http://localhost:8080/

任何想法?

4

1 回答 1

0

我能够解决这个问题,但并没有真正找到真正的原因。解决方案是将ear部署在另一台具有公共IP(如openshift)的服务器上。

于 2014-06-08T01:44:44.200 回答