0

以下のリンクは安全な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またはFilterを介して要求にアクセスしようとすると、Webコンテナー(WebSphere)がlogin.jspのリダイレクトを実行しているように見えます。$ {param.resource}も、リダイレクトが原因で機能しません。

最も簡単な解決策は、ブラウザにリダイレクトではなく転送を実行させることですが、これまでのところ、セキュリティ制約(または他の場所)で転送を強制する方法を見つけることができません。私は他のいくつかの複雑なセッションフローについて考えましたが、どれも好きではありません。

ある程度受け入れられる唯一の解決策は、アクションを更新してURLパラメータを含めるJavaScriptを含めることですが、一部のブラウザは元のURLを残し、一部はリダイレクトURL(wwwtest.mycompany)に更新されるため、常に機能するとは限りません。 com / mwa / login.jsp)。

セキュリティのためにリダイレクトするのではなく転送するようにリクエストを強制するか、この問題をまったく別の方法で回避するにはどうすればよいですか?

アップデート

  • リソースパラメータは動的であり、サードパーティによって設定されます
  • url-pattern "/ ssologin"を削除すると、JSTL/EL構文は完全に正常に機能します
  • 「リソース」パラメータがリクエストに含まれなくなったため、非表示のパラメータは機能しません

ありがとう、ショーン

4

1 に答える 1

0

フォーム(ログイン)の非表示フィールドを取得し、

<input type="hidden" name="someParam" value="${param.resource}"/>

これは次のフォームPOSTで受け取ります(loginFormの送信時)

また、BalusCが述べているように、XMLをエスケープする必要があります。

<input type="hidden" name="resource" value="${fn:escapeXml(param.resource)}"/> 
于 2012-06-19T22:03:45.743 に答える