我正在玩以下堆栈:
- 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/
任何想法?