Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在登录页面访问请求数据_Java_Security_Jsp_Servlets - Fatal编程技术网

Java 在登录页面访问请求数据

Java 在登录页面访问请求数据,java,security,jsp,servlets,Java,Security,Jsp,Servlets,下面的链接是一个安全的URL,我需要在登录后保留“resource”参数,因为它用于在成功登录后重定向用户 http://wwwtest.mycompany.com/mwa/ssologin?resource=/content/en/home.html web.xml <security-constraint> <web-resource-collection> <web-resource-name>Secured</w

下面的链接是一个安全的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>

安全的
/家
/jsp/apps/*
/SSOLIGN
收到
邮递
受保护链接
受保护的
类型
mycompany.com
/login.jsp
/error.jsp
场地受保护部分
受保护的
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)正在执行重定向my login.jsp。由于重定向,${param.resource}也无法工作

最简单的解决方案是让浏览器执行转发而不是重定向,但到目前为止,我找不到在安全约束(或其他任何地方)中强制转发的方法。我想到了一些其他复杂的会话流,但我一个也不喜欢

唯一可以接受的解决方案是包含一些JavaScript来更新操作以包含URL参数,但这并不总是有效,因为有些浏览器保留原始URL,有些浏览器更新为重定向URL(wwwtest.mycompany.com/mwa/login.jsp)

为了安全起见,我如何强制请求被转发而不是重定向,或者以一种完全不同的方式绕过这个问题

更新

  • 资源参数是动态的,由第三方设置
  • 如果我删除url模式“/ssologin”,我的JSTL/EL语法就完全可以正常工作
  • 隐藏参数将不起作用,因为“资源”参数不再在请求中
谢谢,
Sean

在表单中选择一个隐藏字段(登录),然后


您将在下一次表单发布时收到此信息(在提交loginForm时)

正如BalusC所提到的,您需要通过

<input type="hidden" name="resource" value="${fn:escapeXml(param.resource)}"/> 


字段名丢失,并且存在XSS漏洞。@BalusC能否请您详细说明如何在此处使用XSS?需要对
${param.resource}
进行HTML转义,否则最终用户可能会提供恶意JavaScript代码并执行它。使用
fn:escapeXml()
对其进行转义<代码>如果我使此页面不安全,我使用的EL/JSTL可以正常工作,因此输出的语法没有问题。在故障排除过程中,我创建了一个test TagLib,然后对其进行了调试,请求上没有任何属性。我猜是因为浏览器正在执行重定向。您是否在隐藏字段中设置了参数,然后发布了它?资源是动态的吗?如果不是,简单的硬编码itI应该更明确,“资源”参数是动态的,由一些第三方软件提供。
<input type="hidden" name="resource" value="${fn:escapeXml(param.resource)}"/>