身份注入不适用于Wildfly中的WebFilter

时间:2014-06-07 03:24:33

标签: java-ee wildfly picketlink

我正在使用以下堆栈:

  • wildfly8.1.0
  • primefaces 5
  • omnifaces 2.0
  • picketlink 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管理界面中的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()始终被评估为false。此外,我在登录后和过滤器中检查了身份的hashCode,它们是相同的。所以它是同一个实例,但为什么要在WebFilter中注销?此外,当我转到没有过滤器的另一个页面时,identity.isLoggedIn()再次为真。

我正在使用localhost,因此根上下文为http://localhost:8080/

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我能够解决这个问题,但并没有真正找到真正的原因。解决方案是将耳朵部署在另一台服务器上,并使用openhift等公共IP。