我的应用程序是一个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错误页面而不是我自己的。
答案 0 :(得分:0)
我只是javaEE中的新手,但我认为问题是容器在401 HTTP错误之后重定向用户,当他没有被授权时。 403错误表示它知道用户名/密码,但它不适合该资源。
所以我会尝试为这个403错误编写一个过滤器并手动重定向。或者,如果可能,您应该向学生隐藏此页面的链接。
答案 1 :(得分:0)
尝试将403错误重定向到不同于index.jsp的页面,这将显示错误消息。