当前位置: 首页 > 面试题库 >

使用JSF 2.0的用户登录

桂志诚
2023-03-14
问题内容

我正在尝试-使用JSF 2.0-以一种简洁的方式实现登录/记住我/注销管理。由于传统<form action="j_security_check" ...方法缺乏灵活性,因此我决定采用不同的方法,但是我发现了一个问题。

声明性安全正确地通过设置无论是在应用服务器<security-domain>和在web.xml中通过<security-constraint><login-config><form-login-page>

登录页面:

<h:form id="loginForm"> 
    <h:panelGrid columns="2" cellspacing="5">
        <h:outputText value="Username" />
        <h:inputText value="#{loginBean.username}" />
        <h:outputText value="Password:" />
        <h:inputText value="#{loginBean.password}" />
        <h:outputLabel value=""/>
        <h:commandButton value="Login" action="#{loginBean.login}" />
    </h:panelGrid>      
</h:form>

和简单的LoginBean#login():

public String login( )
{
    HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance( ).getExternalContext( ).getRequest( );        
    try {
        request.login( username, password );
    }
    catch ( ServletException e ) {
        FacesContext.getCurrentInstance().addMessage( "Unknown login...
        return null;
    }       
    return "i_dont_know_where_you_were_going";
}

一切正常,但是成功登录后,我不知道如何将用户转发到其原始请求。由于登录页面会自动插入客户端请求和“任何”安全资源之间,因此我需要一种方法来了解将操作重定向到何处。request.getRequestURL( )没有帮助,可能是由于RequestDispatcher#forward()(会覆盖请求网址)干预。您是否认为这是管理登录过程的合适方法?如果是这样,有关此问题的任何提示吗?

非常感谢!


问题答案:

在登录视图中添加类似以下内容的内容。它在登录期间存储请求的页面。

<f:param name="redirect" value="#{requestScope['javax.servlet.forward.request_uri']}" />

然后在您的登录bean中获取请求的uri。

FacesContext context = FacesContext.getCurrentInstance();
String redirect = context.getExternalContext().getRequestParameterMap().get("redirect");

添加?faces-redirect=true字符串并返回它。



 类似资料:
  • 问题内容: 我有一个完全由Weblogic容器保护的Web应用程序。现在,我必须列出当前登录的用户。我必须为此使用Spring Security 2.0.4 在web.xml中,我定义了必要的侦听器和过滤器: 之后,按照我的理解,我定义了bean: 最后,我编写了一个简单的JSP页面,其中列出了用户: 这是我的帮助程序类尝试获取用户列表的方式: 不幸的是,所有这些都不起作用,我也不知道该如何调试。

  • 接口说明 用户登录 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /api/user/1.0.0/login 是否需要登录 否 请求字段说明 参数 类型 请求类型 是否必须 说明 username string form 是 用户名 password string form 是 密码 响应字段说明 参数 类型 说明 user St

  • 回顾 在上一章中,我们已经创建了数据库以及学会了使用它来存储用户以及 blog,但是我们并没有把它融入我们的应用程序中。在两章以前,我们已经看到如何创建表单并且留下了一个完全实现的登录表单。 在本章中我们将会建立 web 表单和数据库的联系,并且编写我们的登录系统。在本章结尾的时候,我们这个小型的应用程序将能够注册新用户并且能够登入和登出。 我们接下来讲述的正是我们上一章离开的地方,所以你可能要确

  • 遇到此问题时,我正在尝试使用 Inno Setup 创建安装程序,其他所有内容都在安装,但注册表项未安装在当前用户中。我发现了这个有用的主题(非常感谢! Inno 设置 为登录用户(非管理员用户)创建注册表项 这解决了添加注册表项的问题,如下所示: 我的问题: 指的是管理员用户(管理员)而不是本地用户(测试): 它添加了:HKCU\Software\myprinter OutputFile REG

  • 我想设置以下工作流: 最初,在没有登录的情况下,Swagger只显示2-3个endpoint——这将通过从后端提供有限的OpenAPI3JSON来实现,没有问题 有可能和斯威格一起做第三项吗?我如何手动发出请求从Swagger与OAuth2承载令牌(因为用户登录,令牌必须在某些地方)和重绘Swagger页面?

  • 问题内容: 我需要输入USER表的USER_ID字段作为另一个表中的外键。因此,我认为我需要在用户登录时启动一个会话。我很难让它在任何地方回显。我能够启动一个会话,该会话允许我回显USERNAME,但无法将其复制为ID。 请帮忙吗?我的处理代码如下。我还粘贴了本节,我暂时尝试对其进行回显以进行测试。 处理脚本: 我希望USER_ID出现在哪里: 问题答案: 使用FETCH_ASSOC而不是FETC