如何将未经授权的用户重定向到某个JSP页面? (使用基于声明角色的授权)

时间:2014-02-03 08:40:09

标签: java security jsp servlets model-view-controller

[使用JEE,MVC-JSP + Servlets,TomEE服务器,MySQL]

我正在使用基于声明形式的身份验证,基于角色的授权。所以,基本上我的web.xml有以下内容:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>secured</web-resource-name>
        <url-pattern>/somePage.jsp</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>ADMINISTRATOR</role-name>
    </auth-constraint>
</security-constraint>

<security-role>
    <role-name>ADMINISTRATOR</role-name>
</security-role>
<security-role>
    <role-name>USER</role-name>
</security-role>

<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.jsp</form-login-page>
        <form-error-page>/error.jsp</form-error-page>
    </form-login-config>
</login-config>

允许具有ADMINISTRATOR角色的用户访问somePage.jsp。当USER角色的用户尝试访问somePage.jsp时,(通常)拒绝访问,并在浏览器中返回页面HTTP Status 403 - Access to the requested resource has been denied

我希望当未经授权的用户尝试访问somePage.jsp以重定向到另一个包含相应消息的jsp页面时。如何才能做到这一点?或者,处理未经授权的用户访问尝试的做法是什么?

1 个答案:

答案 0 :(得分:1)

您通常会在web.xml中创建自定义403错误页面和映射。您已在web.xml中映射了类似......

的内容
<error-page>
    <!-- Forbidden directory listing -->
    <error-code>403</error-code>
    <location>/general-error.html</location>
</error-page>

/general-error.html将是您的自定义403错误页面。我的理解是这些页面应该是相对通用的,因为当时所有的webapp都是错误代码,所以对于所有用户它们应该是相同的。