Внедрение идентификационных данных не работает в WebFilter в Wildfly

Я играю со следующим стеком:

  • дикая муха8.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 и изменил определение веб-модуля проекта уха pom.xml на:

<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. Также я проверил хэш-код идентификации после входа в систему и в фильтре, и они были одинаковыми. Итак, это тот же экземпляр, но зачем выходить из WebFilter? Кроме того, когда я перехожу на другую страницу без фильтра, identity.isLoggedIn() снова становится истинным.

Я работаю на локальном хосте, поэтому корневой контекст http://localhost:8080/

Есть идеи?


person czetsuya    schedule 07.06.2014    source источник


Ответы (1)


Я смог решить эту проблему, но не смог найти настоящую причину. Решение состояло в том, чтобы развернуть ухо на другом сервере с общедоступным IP-адресом, например openshift.

person czetsuya    schedule 08.06.2014