2009-07-01 14 views
2

アプリケーションを開発する際に、さまざまな役割を持つ異なるユーザーとしてすぐにログインして、アプリケーションがどのように表示されるかを確認することは非常に便利です。開発モードのスプリングセキュリティの事前認証

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

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

N.B.:パスワードはハッシュされ、フォームを使用してプレーンテキストで送信されるため、リンクのパスワードのエンコードはオプションではありません。

明らかにこの機能は開発時にのみ提供されます。

どうすればこの問題を解決できますか?

答えて

2

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

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

サーバーコンテキスト。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> 
... 
0

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

protected boolean requiresAuthentication(
    HttpServletRequest request, HttpServletResponse response) 
をして requestでいくつかのパラメータに応じて、trueを返す:オーバーライドします

public class YourSpecialDevelopmentTimeFilter 
extends AuthenticationProcessingFilter 
implements SyncSecurityFilter 
.... 

を:カスタムフィルタを書くことについて

どのように?

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

4

開発モードに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の実装に置き換えてください。私は、Webアプリケーションのために、このようにそれを行っている

関連する問題