6

我正在将 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/core/abc.xhtml

在web.xml的帮助下,我现在可以向用户显示登录页面

http://www.somehost:8080/myapp/core/abc.xhtml

或者如果用户来自

http://www.somehost:8080/myapp/core/xyz.xhtml

这个 url 然后在成功登录后用户将进入这个页面。

4

2 回答 2

0

为了获取用户尝试访问的原始 url,请尝试使用变量RequestDispatcher.FORWARD_REQUEST_URI

仅当您从其他受限页面重定向到登录页面时,此变量才可用。所以,请记住有一些默认的 url,以防用户直接点击登录页面。

正如 rrufai 指出的,一旦用户请求的原始 url 可用,您可以按照本文中提到的步骤在身份验证完成后重定向到该 url。

于 2013-03-18T11:13:40.430 回答
0

使用重定向在下一页转发控制。

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/

更新:

要确定从哪个页面发出请求,请参阅以下帖子:

dispatcher.forward(request,response)后如何从servlet中的请求中获取上一页URL

多个servlet转发后如何从servlet/jsp获取原始请求url

http://www.coderanch.com/t/361942/Servlets/java/Track-Jsp-request-coming-Servlet

于 2013-03-19T13:25:16.473 回答