通过下面的链接访问请求的数据是安全的URL,我需要在登录后,坚持“资源”的参数,因为它是用来在成功登录后,将用户重定向。在登录页面
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 PARAM)不再存在
<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容器(Web Sphere)正在执行我的login.jsp重定向。由于重定向,$ {param.resource}不起作用。
最简单的解决办法是让浏览器执行的,而不是重定向前进,但到目前为止,我无法找到一个方法来强制执行的安全约束向前(或其他地方)。我想到了其他一些令人费解的会话流程,但我不喜欢它们。
有些可接受的唯一解决方案是包含一些JavaScript更新操作以包含URL参数,但这并不是一直工作,因为一些浏览器保留原始URL并且一些浏览器更新为重定向URL( wwwtest.mycompany.com/mwa/login.jsp)。
如何我不是强制执行请求被转发干脆而不是重定向的安全,还是解决这个问题拿到以不同的方式?
UPDATE
- 资源参数是动态的,由第三方
- 我JSTL/EL语法工作绝对没设置,如果我删除的url-pattern “/ ssologin”
- 隐藏参数将无法工作,因为“资源”参数是在请求不再
感谢, 肖恩
是资源动态?如果没有,简单地硬编码 – cen
我应该更加明确,“资源”参数是动态的,并由一些第三方软件提供。 –