以下链接是一个安全的URL,我需要在登录后保留“resource”参数,因为它用于在成功登录后重定向用户。
http://wwwtest.mycompany.com/mwa/ssologin?resource=/content/en/home.html
的web.xml
<security-constraint>
<web-resource-collection>
<web-resource-name>Secured</web-resource-name>
<description></description>
<url-pattern>/home</url-pattern>
<url-pattern>/jsp/apps/*</url-pattern>
<url-pattern>/ssologin</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<description>protectedlinks</description>
<role-name>protected</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>mycompany.com</realm-name>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/error.jsp</form-error-page>
</form-login-config>
</login-config>
<security-role>
<description>
Protected portion of site</description>
<role-name>protected</role-name>
</security-role>
login.jsp - 用户似乎被重定向到login.jsp,请求属性(包括“资源”URL参数)不再存在
<form name="loginForm" method="post" action="login?resource=<c:out value='${param.resource}'/>">
Username:
<br/>
<input type="text" size="15" name="user">
<br/>
Password:
<br/>
<input type="password" size="15" name="password">
<br/>
<input type="Submit" value="Login">
当我尝试通过TagLib或过滤器访问请求时,似乎Web容器(WebSphere)正在执行重定向我的login.jsp。由于重定向,$ {param.resource}无效。
最简单的解决方案是让浏览器执行转发而不是重定向,但到目前为止,我找不到在安全约束(或其他任何地方)中强制执行转发的方法。我想到了其他一些错综复杂的会话流程,但我不喜欢它们。
唯一可接受的解决方案是包含一些更新操作以包含URL参数的JavaScript,但这不会一直有效,因为某些浏览器会保留原始URL,而某些浏览器会更新为重定向URL(wwwtest) .mycompany.com / MWA / login.jsp的)。
如何强制执行转发请求而不是重定向以确保安全性,或者以完全不同的方式解决此问题?
更新
谢谢, 肖恩
答案 0 :(得分:0)
在表单中隐藏字段(登录)和
<input type="hidden" name="someParam" value="${param.resource}"/>
您将在下一个表单POST(提交loginForm时)
收到此信息另外正如BalusC所提到的,你需要通过
来逃避XML<input type="hidden" name="resource" value="${fn:escapeXml(param.resource)}"/>