这是我的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。有什么想法吗?
答案 0 :(得分:0)
安全约束不适用于服务器端转发的请求,仅仅因为无论如何限制访问都为时已晚。此外,控件是100%掌握在Web开发人员手中,因此开发人员应该自己知道他/她正在做什么。安全性约束仅适用于直接客户端请求。您需要发送重定向而不是转发。重定向指示客户端在给定URL上发送全新的HTTP请求。
您可以通过调用servlet过滤器中的HttpServletResponse#sendRedirect()
或<meta http-equiv="refresh">
中的HTML <head>
元素或JSTL <c:redirect>
标记来发送重定向。