質問

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

ユーザー名を入力したり、パスワードを入力したりするのは楽しいことではなく、時間の無駄です。私がやりたいことは次のとおりです。

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

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

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

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

役に立ちましたか?

解決

私は、Webアプリケーションのために、このようにそれを行っている。

私は(もちろん唯一の開発サーバーでの)サーバーのcontext.xmlで構成パラメータを持っています。このパラメータは、ユーザー名とパスワードの昏睡区切りリストが含まれています。

(JSP(x))を単に追加のフォームを追加し、各ユーザ名のための送信ボタンをログインページには、パスワードアイテムは、コンテキストパラメータを形成します。したがって、ユーザーは、事前定義されたログインデータと通常のログインプロセスがtriggedされたボタンをクリックした場合。

サーバの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>
...

他のヒント

開発モード用InMemoryDaoImplを使用してください。メモリに格納されているユーザーおよびパスワードを作成することは非常に簡単です。

<bean id="userDetailsService" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">
  <property name="userMap">
    <value>
      admin=admin,ROLE_ADMIN,ROLE_USER
      user1=user1,ROLE_USER
      user2=user2,ROLE_USER
    </value>
  </property>
</bean>

開発モードでは、認証プロバイダにこれを注入します。本番では、適切なDBまたはLDAP実装で置き換えます。

私はあなたには、いくつかの特定のURLが要求された場合SpringSecurityは、自動的にユーザーを認証したいと思います(と、あなたのパネル/ページでこのURLへのリンクを持っているでしょう)理解でます。

どのようにカスタムフィルタを書くことについてます:

public class YourSpecialDevelopmentTimeFilter 
extends AuthenticationProcessingFilter 
implements SyncSecurityFilter
....

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

protected boolean requiresAuthentication(
     HttpServletRequest request, HttpServletResponse response)

requestでいくつかのパラメータに依存してtrueを返す?

もちろん、他の関心事は、本番環境でこの機能を持っているではありません。それは、のDEV のために異なるコードベースを持っていることは常に危険なものであるとのPROD

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top