0

アプリケーションを保護するために Spring Security 3.0.0 を構成しようとして、私はゆっくりと狂気に陥っています。

クライアント認証 (スマート カードを使用) を要求するようにサーバー (jetty) を構成しました。ただし、applicationContext-security.xml と UserDetailsS​​ervice の実装を正しく取得できないようです。

まず、アプリケーション コンテキスト ファイルから:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:security="http://www.springframework.org/schema/security"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
            http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">


<security:global-method-security secured-annotations="enabled" />

<security:http auto-config="true">
    <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" requires-channel="https"/>
    <security:x509 subject-principal-regex="CN=(.*?)," user-service-ref="accountService" />
</security:http>

<bean id="accountService" class="com.app.service.AccountServiceImpl"/>

UserDetailsS​​ervice は次のようになります。

public class AccountServiceImpl implements AccountService, UserDetailsService {

private static final Log log = LogFactory.getLog(AccountServiceImpl.class);

private AccountDao accountDao;

@Autowired
public void setAccountDao(AccountDao accountDao) {
    this.accountDao = accountDao;
}

public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException, DataAccessException {

    log.debug("called loadUserByUsername()");
    System.out.println("called loadByUsername()");
    
    Account result = accountDao.getByEdpi(s);
    return result;

}

}

アプリケーションにはログイン ボタンのある「フロント ページ」があるため、そのページへのアクセスには、いかなる種類の認証も必要ありません。

どんな助けでも大歓迎です。

4

2 に答える 2

5

アプリケーションには、ログイン ボタンのある「フロント ページ」があるため、そのページへのアクセスには、いかなる種類の認証も必要ありません。

ここに何か問題があります。クライアント認証を要求するようにサーブレット コンテナーをセットアップする場合、そのようなオープン フォー オール ページを作成することはできません。その場合、スマートカードを持たないユーザーの認証ハンドシェイクは成功せず、コンテナー エラー ページも表示されません。ブラウザーになります。代わりにエラー。

コンテナを作成してクライアント認証を許可し、ログインページを匿名ユーザーに公開し、SpringSec によって他のページを保護することができます。しかし、スマートカード PKI アプリにはこれをお勧めしません。スマートカード認証はセキュリティの重要性を意味し、非スマートカード ユーザーをコンテナー ハンドシェイクの早い段階で破棄する方が信頼性が高くなります。その場合でも、アプリにリンクされた「ログイン」ボタンを使用して、ユーザーフレンドリーなログインページを別のポートに配置できます。

SpringSecurity のセットアップでサポートが必要な場合は、投稿に問題に関する詳細情報を追加してください。

于 2012-03-14T20:56:16.293 に答える
1

構成の観点からは、問題ないように見えます。表示されているエラーは何ですか? UserDetailsS​​ervice が X.509 証明書からの CN で呼び出されるのを見ていますか?

于 2010-02-12T22:03:09.403 に答える