在Glassfish 4.1上的受限区域Java EE中导航

时间:2014-12-20 21:14:29

标签: jsf java-ee glassfish jaas jdbcrealm

我正在开发基于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";
}

0 个答案:

没有答案