我正在使用OpenId4Java与JSF应用程序,我在我的web.xml中添加了安全约束,就像这样…
<security-constraint>
<web-resource-collection>
<web-resource-name>Restricted</web-resource-name>
<url-pattern>/core/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/user/login.xhtml</form-login-page>
<form-error-page>/user/logout.xhtml</form-error-page>
</form-login-config>
</login-config>
现在当应用程序启动时,用户想要访问
http://www.somehost: 8080/myapp/核心/abc.xhtml
在web.xml的帮助下,我能够向用户显示一个登录页面,现在这里我把登录与openid像谷歌,雅虎现在我的问题是,我怎么能告诉openid我的返回url是
http://www.somehost: 8080/myapp/核心/abc.xhtml
或者用户来自
http://www.somehost: 8080/myapp/核心/xyz.xhtml
这个url然后成功登录后用户将进入这个页面。
为了获得用户试图访问的原始url,请尝试使用变量RequestDispatcher.FORWARD_REQUEST_URI。
只有当您从其他受限制的页面重定向到登录页面时,此变量才可用。因此,请记得设置一些默认url,以防用户直接点击登录页面。
正如rufai所指出的,一旦用户请求的原始url可用,在身份验证完成后,您可以按照本文中提到的步骤重定向到该url。
使用重定向来转发下一页的控件
String returnToUrl = returnToUrl("/nextPage.xhtml");
FacesContext.getCurrentInstance().getExternalContext().dispatch(returnToUrl);
看看这个:
http://blog.enterpriselab.ch/tdmarti/2011/04/06/openid-in-a-web-application-based-on-java-ee-and-jsf-2-0/更新:
要确定从哪个页面发出请求,请参考这些帖子:
如何在调度程序之后从servlet请求中获取前页URL。提出(请求、响应)
如何在多个servlet转发后从servlet/jsp获得原始请求url
http://www.coderanch.com/t/361942/Servlets/java/Track-Jsp-request-coming-Servlet