4

Spring Security 3.0.7 を使用して、ユーザー名/パスワードまたは OpenID を使用してユーザーを認証する Web アプリケーションに取り組んでいます。今、いくつかのアカウントを無効にする機能が必要です。最初は関連するドキュメントが見つかりませんでしたが、最終的にUser.isEnabled()を見つけました:

ユーザーが有効か無効かを示します。無効化されたユーザーは認証できません。

このフラグの値はコンストラクターで指定されます。

フォームを使用して認証すると、正常に機能するようです。残念ながら、Spring の OpenID はフラグを完全に無視しているようです。可能な限りログに記録しましたが、ログで確認できます。

DEBUG ossoOpenIDAuthenticationFilter -認証成功。以下を含むように SecurityContextHolder を更新しています: 守られたパスワード]; 有効: false; AccountNonExpired: 真; credentialsNonExpired: true; AccountNonLocked: 真; 付与された権限: ROLE_USER; 資格情報: [保護]; 認証済み: true; 詳細: org.springframework.security.web.authentication.WebAuthenticationDetails@fffd148a: RemoteIpAddress: 127.0.0.1; セッション ID: 1arhd8er0sj1yynglq8linpnb; 付与された権限: ROLE_USER、属性: []]

無効なアカウントで認証を成功させるにはどうすればよいですか? (代わりにアカウントをロックしようとしても同じです。)

私は何か重要なものを見逃していますか?それとも単なるバグですか?何を探すべきか、さらにどのようなロギングを有効にするかについてのアイデアはありますか?


私のXML構成:

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

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

  <http use-expressions="true" auto-config="true">
    <intercept-url pattern="/" access="permitAll" />
    <!-- ... other pattens -->
    <form-login
        login-page="/"
        authentication-success-handler-ref="loginSuccessHandler"
    />

    <remember-me data-source-ref="dataSource" user-service-ref="myUserDetails"/>

    <openid-login
        user-service-ref="openIdAuth"
        authentication-success-handler-ref="loginSuccessHandler"
        authentication-failure-handler-ref="openIdFailureHandler"
        >
      <attribute-exchange>
        <openid-attribute name="email" type="http://axschema.org/contact/email" required="true" />
        <openid-attribute name="name" type="http://axschema.org/namePerson" />
      </attribute-exchange>
    </openid-login>
    <logout success-handler-ref="logoutSuccessHandler"/>
  </http>

  <authentication-manager>
    <authentication-provider ref="daoAuthenticationProvider"/>
  </authentication-manager>

  <beans:bean id="daoAuthenticationProvider"
    class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
    <beans:property name="userDetailsService" ref="myUserDetails"/>
    <beans:property name="saltSource" ref="saltSource"/>
    <beans:property name="passwordEncoder" ref="passwordEncoder"/>
    <beans:property name="preAuthenticationChecks">
      <beans:bean class="org.springframework.security.authentication.AccountStatusUserDetailsChecker"/>
    </beans:property>
  </beans:bean>
</beans:beans>

myUserDetailsこれは、データベースからユーザーをロードし、の単純なカスタム実装を返すカスタム BeanですUser

public class UserInfo
    extends User
{
    public UserInfo(UserEntity user)
    {
        super(  user.getUserName(),
                user.getPassword(),
                !user.isDisabled(), // enabled
                true, // non-expired
                true, // credentials non-expired
                !user.isLocked(), // non-locked
                UserInfo.authorities(user) // my static method
            );
        // store some info for further reference here
        // ...
    }
    // ...
}
4

1 に答える 1