<分区>
我正在尝试 - 使用 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)干预。您认为这是管理登录过程的适当方式吗?如果是这样,关于这个问题有什么提示吗?
非常感谢!