Authentication JSF2.0简单登录页面
我需要限制对应用程序一部分的访问。为了访问该部分,用户需要登录。我的数据库中有一个名为User的表,其中有用户名和散列密码,还有一个由两个输入和一个submit组成的登录表单。但是,我不知道应该使用哪些类/数学ID登录用户(我假设jsf中支持此功能)。另外,据我所知,我需要编辑web.xml以支持身份验证。有人能提出一个典型的解决方案和一般步骤,我需要做的,以获得该功能(链接,非常感谢的教程) 我还想知道,如果用户未登录,如何限制对另一个页面的访问,因此当用户键入指向某个页面的直接链接时,他将被重定向到主登录页面 提前感谢您的帮助。Authentication JSF2.0简单登录页面,authentication,postgresql,logging,jsf-2,Authentication,Postgresql,Logging,Jsf 2,我需要限制对应用程序一部分的访问。为了访问该部分,用户需要登录。我的数据库中有一个名为User的表,其中有用户名和散列密码,还有一个由两个输入和一个submit组成的登录表单。但是,我不知道应该使用哪些类/数学ID登录用户(我假设jsf中支持此功能)。另外,据我所知,我需要编辑web.xml以支持身份验证。有人能提出一个典型的解决方案和一般步骤,我需要做的,以获得该功能(链接,非常感谢的教程) 我还想知道,如果用户未登录,如何限制对另一个页面的访问,因此当用户键入指向某个页面的直接链接时,他将被
Grem.您可以使用j_安全检查。您所要做的就是发布到它,它将根据您定义的领域和web.xml中特定于应用程序的配置来处理身份验证 根据应用服务器的不同,还有一个附加步骤可以将定义的角色(特定于应用)链接到组(特定于领域) 以下是一个典型配置:
<servlet>
<servlet-name>Login</servlet-name>
<servlet-class>com.example.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Error</servlet-name>
<servlet-class>com.example.Error</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Error</servlet-name>
<url-pattern>/Error</url-pattern>
</servlet-mapping>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>example.com</realm-name>
<form-login-config>
<form-login-page>/Login</form-login-page>
<form-error-page>/Error</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>arbitraryRoleName</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<web-resource-name>All Pages</web-resource-name>
<url-pattern>/index.xhtml</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>arbitraryRoleName</role-name>
</auth-constraint>
</security-constraint>
登录
com.example.Login
登录
/登录
错误
com.example.Error
错误
/错误
形式
example.com
/登录
/错误
任意环烯胺
所有页面
/index.xhtml
任意环烯胺
注意
安全角色
。这仍然需要链接到一个组中,或者您定义的任何内容,以区分可以使用页面的用户和不能使用页面的用户。您可以使用Servlet 3.0中引入的HttpServletRequest API:
/**
* Performs authentication via HttpServletRequest API
*/
public String login(String username, String password) throws IOException {
try {
getRequest().login(username, password);
this.user = userDao.find(username);
} catch (ServletException e) {
JsfUtil.addErrorMessage(JsfUtil.getStringResource("loginFailed"));
return null;
}
return "/index?faces-redirect=true";
}
public String logout() throws ServletException {
this.user = null;
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
if (isAuthenticated())
getRequest().logout();
return "logout";
}
public boolean isAuthenticated() {
return getRequest().getUserPrincipal() != null;
}
public static HttpServletRequest getRequest() {
Object request = FacesContext.getCurrentInstance().getExternalContext().getRequest();
return request instanceof HttpServletRequest
? (HttpServletRequest) request : null;
}
非常感谢,扎克。除了使用j_安全检查,没有其他方法了吗?我知道有一个类具有登录和注销方法,我可以使用,但不记得它的名称。这不是JSF2的一部分。这是Servlet3.0的一部分。因此,只有在Tomcat 7、Glassfish 3、JBoss AS 6等或更高版本上运行JSF 1.x/2.x/whatever时,这才有效。@BalusC感谢您指出这一点。我相应地修改了答案。您有Servlet2.5的解决方案吗?我使用JBoss5.1,它使用Java5。所以我不能用它。如果您有任何建议,那就太好了。您可以使用基于表单的身份验证,使用j_security_check。