jsp安全约束不起作用

时间:2012-03-19 22:23:23

标签: jsp

这是我的web.xml

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Admin</web-resource-name>
            <url-pattern>/admin/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>administrator</role-name>
        </auth-constraint>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Staff</web-resource-name>
            <url-pattern>/staff/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>administrator</role-name>
            <role-name>staff</role-name>
        </auth-constraint>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Registered Users</web-resource-name>
            <url-pattern>/registeredUser/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>administrator</role-name>
            <role-name>staff</role-name>
            <role-name>registeredUser</role-name>
        </auth-constraint>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>

这是我的索引页面,因为我希望他们使用j_security_check

登录
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
    <meta charset="ISO-8859-1">
    <jsp:forward page="/registeredUser/SplashPage.jsp"/>
</head>
</html>

它会直接进入页面,从不要求登录。

我的目录大致如下:

WebContent
index.jsp
WEB-INF
-->lib
-->views
   --->admin
      --->//admin pages
   --->staff
      --->//staff pages
   --->registeredUser
      --->registeredUser pages

基本上它会直接进入没有任何j_security_check的页面。如果我创建其中一个约束* .jsp,它将进入j_security_check。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

安全约束不适用于服务器端转发的请求,仅仅因为无论如何限制访问都为时已晚。此外,控件是100%掌握在Web开发人员手中,因此开发人员应该自己知道他/她正在做什么。安全性约束仅适用于直接客户端请求。您需要发送重定向而不是转发。重定向指示客户端在给定URL上发送全新的HTTP请求。

您可以通过调用servlet过滤器中的HttpServletResponse#sendRedirect()<meta http-equiv="refresh">中的HTML <head>元素或JSTL <c:redirect>标记来发送重定向。