gpt4 book ai didi

java - JSF 2.2 和身份验证 : redirect condition

转载 作者:太空宇宙 更新时间:2023-11-04 14:21:09 24 4
gpt4 key购买 nike

注意:这些场景中的用户已经有一个帐户。我正在使用 Java EE 7:JSF 2.2、GLassfish 4.1 和基于 From 的身份验证。目标:当用户第一次登录(登录)时,我想将他重定向到(例如)页面:a.xhtml,以便他输入一些信息。之后他每次登录都会重定向到页面:normal.xhtml 而不是a.xhtml。正如你在下面的代码中看到的,用户登录后,他总是会被重定向到a.xhtml,这就是问题所在:

<security-constraint>
<display-name>securityConstraint1</display-name>
<web-resource-collection>
<web-resource-name>resources</web-resource-name>
<description></description>
<url-pattern>/private/* </url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>Admin</role-name>
</auth-constraint>

</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>ProjRealm</realm-name>
<form-login-config>
<form-login-page>/login.xhtml</form-login-page>
<form-error-page>/public/pages/forbidden.xhtml</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>Admin</role-name>
</security-role>
<welcome-file-list>
<welcome-file>private/inscription/a.xhtml</welcome-file>
</welcome-file-list>

第二个问题:当我访问“默认项目页面”时:http://localhost:8080/Pro1.0/ 服务器希望将我重定向到 protected a.xhtml,并且由于用户未经身份验证,服务器将我重定向到 web.xml 中声明的“form-login-page”页面,我的问题是如何使服务器将“默认项目页面”重定向到公共(public)页面(像任何网站一样的主页)并重定向用户当按照第一个问题中的要求对普通.xhtml 等私有(private)页面进行身份验证时。谢谢,如果您有任何问题,我就在这里。

UPDATE: Thanks Oskars Pakers for solution

这是我的实现:web.xml:

<welcome-file-list>
<welcome-file>redirect.xhtml</welcome-file>
</welcome-file-list>

重定向.xhtml:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:h="http://xmlns.jcp.org/jsf/html">
<f:metadata>
<f:viewAction action="#{redirect.testUser}"></f:viewAction>
</f:metadata>
<h:head>
</h:head>
<h:body>
<h1>TEST Redirect</h1>
</h:body>
</html>

重定向.java:

@Named
@RequestScoped
public class Redirect extends BaseBacking {

private static final String AAA = "/private/inscription/aaa.xhtml?faces-redirect=true";
private static final String NORMAL = "/private/sections/normal.xhtml?faces-redirect=true";
private static final String HOME = "/home.xhtml?faces-redirect=true";

@EJB
private EJBClass EJBClass;

public String testUser() {
Principal user = getRequest().getUserPrincipal();
if (user == null) {
return HOME;
}
BigInteger Id = /*here I call a EJBClass method so I can decide is it the first time the user login OR NOT*/(user.getName());
if (Id == null) {
return AAA;
} else {
return NORMAL;
}
}
}

最佳答案

第一个问题
我在这里看到两个选择。

  1. 您可以在页面 a.xhtml 上检查用户是否曾访问过该页面(并输入了信息)并将其重定向到 normal.xhtml
  2. 您可以切换到编程登录,创建自定义 jsf 页面并执行与此类似的支持 bean 方法

    字符串登录(){ HttpServletRequest 请求 = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();request.login(用户名,密码); //检查用户是否已经在a.xhtml中返回“a.xhtml”;//或返回“normal.xhtml”}

第二个问题

与问题一类似,您必须检查您的公共(public)页面是否用户已登录并重定向到他的页面。当您使用 JSF 2.2 时。你看到了吗

<f:viewAction

标签?它在进入页面时执行方法。如果您想重定向用户,您可以返回结果。
参见f:viewAction

关于java - JSF 2.2 和身份验证 : redirect condition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27173658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com