java - 使用 JSF 2.0 的用户登录

标签 java jsf jakarta-ee authentication jsf-2

<分区>

我正在尝试 - 使用 JSF 2.0 - 以简洁的方式实现登录/记住我/注销管理。自传统<form action="j_security_check" ...方式缺乏灵 active 我决定走另一条路,但我发现了一个问题。

通过 <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() (覆盖请求 url)干预。您认为这是管理登录过程的适当方式吗?如果是这样,关于这个问题有什么提示吗?

非常感谢!

最佳答案

将类似以下行的内容添加到您的登录 View 。它在登录期间存储请求的页面。

<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添加到字符串中并返回。

关于java - 使用 JSF 2.0 的用户登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8024344/

相关文章:

java - 从 java web 应用程序启动很长的后台进程的最佳方法是什么?

Java游戏引擎,编写自己的脚本语言?

java - 将 Graphics2d 调整为 JScrollPane

java - 通过 servletvideo java 查看 flv 视频

jsf - Primefaces文件下载不起作用?

java - 用java写入文本文件

java - persistence.xml Jboss 6.x + jpa 上部署错误

java - Sonar 插件 Eclipse

JSF 无法获取自定义复合输入组件的渲染器

java - EJB3 和 JAAS 主题/主体如何从 servlet 容器传播到 EJB 层?