我正在开发基于Glassfish 4.1上的Java EE 7的webapp。我是这个环境的新手,我按照一些指南来创建基于JDBC Realm的身份验证。
我只有一个用户角色(名为USER),应该能够访问/ user文件夹中的所有XHTML页面。
问题是,当用户登录时,他被重定向到他的个人主页(直到现在一切都很好),但如果我在同一/用户文件夹中添加任何链接到另一个页面,我仍然需要再次登录!此外,如果我刷新用户的主页,我仍然需要登录。
如何解决此问题?我错过了什么吗?
以下是一些您可能会对我有用的代码:
的web.xml
<login-config>
<auth-method>FORM</auth-method>
<realm-name>myJdbcRealm</realm-name>
<form-login-config>
<form-login-page>/login.xhtml</form-login-page>
<form-error-page>/loginErr.xhtml</form-error-page>
</form-login-config>
</login-config>
<security-constraint>
<web-resource-collection>
<web-resource-name>Logged User</web-resource-name>
<description/>
<url-pattern>/user/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>USER</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<role-name>USER</role-name>
</security-role>
的glassfish-web.xml中
<glassfish-web-app error-url="">
<class-loader delegate="true"/>
<jsp-config>
<property name="keepgenerated" value="true">
<description>Keep a copy of the generated servlet class' java code.</description>
</property>
</jsp-config>
<security-role-mapping>
<role-name>USER</role-name>
<group-name>USER</group-name>
</security-role-mapping>
</glassfish-web-app>
login.xhtml
<h:form style="width: 500px; margin: auto; ">
<p:panel header="Login Form">
<p:panelGrid columns="2" id="loginGrid">
<p:outputLabel for="usernameInput" value="Username"/>
<p:inputText id="usernameInput" value="#{loginBean.username}"
required="false" />
<p:outputLabel for="passwordInput" value="Password"/>
<p:password id="passwordInput" value="#{loginBean.password}"
required="false" />
<p:commandButton value="Login"
action="#{loginBean.login()}" update="loginGrid" />
<p:messages/>
</p:panelGrid>
</p:panel>
</h:form>
LoginBean.java
public String login() {
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
try {
request.login(this.username, this.password);
} catch (ServletException e) {
MessageBean.addError("Login failed");
return NavigationBean.toLogin();
}
return "/user/home?faces-redirect=true";
}