JavaEE Security,访问受限页面:已注销用户被正确重定向。登录用户不是

时间:2010-07-27 14:49:20

标签: java-ee glassfish java-ee-6 glassfish-3

我的应用程序是一个Java EE 6应用程序,在Glassfish 3.0.1上运行。

我正在使用带有JDBC领域的Java EE安全性。所以我对我的一些网页添加了限制。 我在web.xml中添加了以下login-config和security-constraint:

<!-- Redirect access of restricted pages to index.jsp -->
<login-config>
  <auth-method>FORM</auth-method>
  <realm-name>jdbc</realm-name>
  <form-login-config>
    <form-login-page>/index.jsp?login=login</form-login-page>
    <form-error-page>/index.jsp?login=error</form-error-page>
  </form-login-config>
</login-config>

<!-- Restrict access for deanery related resources -->
<security-constraint>
  <display-name>Deanery Constraint</display-name>
  <web-resource-collection>
    <web-resource-name>Deanery Content</web-resource-name>
    <description />
    <url-pattern>/deanery/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <description />
    <role-name>DEANERY</role-name>
  </auth-constraint>
</security-constraint>

如果用户退出,这可以正常工作。如果他试图访问/ deanery /中的页面,他将被重定向到index.jsp(重定向到jsf)。

当用户登录,获得正确的角色时,他可以成功访问受限制的资源。所以一切都很好,直到这里。

现在问题:当权限较小的用户(在我的示例中是学生)登录到应用程序并尝试访问受限制的页面时,他不会被重定向到我的web.xml中配置的错误页面。相反,他出现了一个丑陋的Glassfish 403页面:

  

HTTP状态403 - 拒绝访问所请求的资源

不幸的是,似乎没有选择在我的CustomExceptionHandler中捕获异常。它甚至没有显示在我的server.log中(尽管我切换到最好的级别)。

我该怎么做才能将用户重定向到我的错误页面,而不是显示403页面?为什么用户没有重定向到index.jsp,就像他登出时一样???

修改

刚尝试将带有相应代码的错误页面添加到我的web.xml中。

<error-page>
  <error-code>403</error-code>
  <location>/index.jsp?login=login</location>
</error-page> 

没有效果,仍然是Glassfish错误页面而不是我自己的。

2 个答案:

答案 0 :(得分:0)

我只是javaEE中的新手,但我认为问题是容器在401 HTTP错误之后重定向用户,当他没有被授权时。 403错误表示它知道用户名/密码,但它不适合该资源。

所以我会尝试为这个403错误编写一个过滤器并手动重定向。或者,如果可能,您应该向学生隐藏此页面的链接。

答案 1 :(得分:0)

尝试将403错误重定向到不同于index.jsp的页面,这将显示错误消息。