5

アプリケーションを開発している間、さまざまな役割を持つさまざまなユーザーとしてすばやくログインして、アプリケーションがどのように表示されるかを確認できると非常に便利です。

ユーザー名を入力してパスワードを入力するのは面白くなく、時間の無駄です。私がしたいのは:

  • 利用可能なユーザー名のリストを含むページ/パネルを追加します。
  • ユーザー名をクリックすると、Springセキュリティのイベントが生成され、パスワードを入力しなくても、ユーザーを認証済みとして認識できます。
  • リンクをクリックした後、私は指定されたユーザーとして認証されます。

注意:パスワードはハッシュ化され、フォームを使用してプレーンテキストで送信されるため、リンクにパスワードをエンコードすることはできません。

明らかに、この機能は開発時にのみ存在します。

どうすればこれを達成できますか?

4

3 に答える 3

2

私はWebアプリケーションに対してこのようにそれを行いました:

サーバーの構成パラメーターがcontext.xmlあります(もちろん、開発サーバーのみ)。このパラメーターには、ユーザー名とパスワードのコマ区切りのリストが含まれています。

ログインページ(jsp(x))は、コンテキストパラメータからユーザー名、パスワード項目ごとにフォームと送信ボタンを追加するだけです。したがって、ユーザーがそのボタンをクリックすると、事前定義されたログインデータを使用した通常のログインプロセスがトリガーされます。

サーバーcontext.xml

...
<Context>
    ...
    <Parameter name="quickLogin"
               value="admin:passwd,user:otherPasswd"
               override="false" />
</Context>

login.jspx

...
<!-- Login for debugging purposes -->     
<c:forTokens items="${initParam.quickLogin}" delims="," var="loginPassword">
    <c:set var="login" value="${fn:split(loginPassword, ':')[0]}" />
    <c:set var="password" value="${fn:split(loginPassword, ':')[1]}" />

    <form name="debugLogin" action="${form_url}" method="POST" >
        <crsf:hiddenCrsfNonce/>
        <input type="hidden" name='j_username' value="${fn:escapeXml(login)}" />
        <input type="hidden" name='j_password' value="${fn:escapeXml(password)}" />
        <input type="submit" value="${fn:escapeXml(login)} login" />
    </form>
</c:forTokens>
...
于 2012-01-25T09:04:41.650 に答える
0

私が理解しているように、特定の URL が要求された場合に SpringSecurity に自動的に認証させたいと考えています (そして、パネル/ページにこの URL へのリンクがあります)。

カスタムフィルターを書くのはどうですか:

public class YourSpecialDevelopmentTimeFilter 
extends AuthenticationProcessingFilter 
implements SyncSecurityFilter
....

それはオーバーライドします:

protected boolean requiresAuthentication(
     HttpServletRequest request, HttpServletResponse response)

request?のいくつかのパラメーターに応じて true を返します。

もちろん、もう 1 つの懸念事項は、この機能が運用環境にないことです。devprodに異なるコードベースを使用することは常に危険です。

于 2009-07-01T11:20:23.083 に答える