Я играю со следующим стеком:
- дикая муха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/
Есть идеи?