これはSpring Securityに関する質問です。私のアプリケーションでデフォルトの管理ユーザー(Spring 3、Spring Security)
、私は、ドメインオブジェクトとしてUserエンティティを持っています。ユーザーは登録され、データベースに格納された資格情報でログインします。私のUserドメインオブジェクトには、Spring UserDetailsオブジェクトをサポートする実装が含まれています。
課題は、私が最初のユーザーが作成される前でも、アプリケーションにログインする機能が必要だということです。つまり、「admin」ユーザーを作成するには、「admin」としてログインする必要があります。
私のSpringの設定が機能していることを確認するために、私は現在、SpringSecurityUserDetailsServiceImpl.loadUserByUsername(String userName)からハードコードされた管理者を返しています。
public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException, DataAccessException {
User user=null;
try {
if("admin".equalsIgnoreCase(userName)) {
user=new User();
user.setUserName("ADMIN");
user.setPassword("adsf"); // assume there's a hash of a true password here
user.setStatus(UserStatus.ACTIVE);
user.setAccessLevel(UserAccessLevel.ADMINISTRATOR);
} else {
//user = userDAO.getUserByUserName(userName);
}
} catch(Throwable t) {
throw new UsernameNotFoundException("Unable to locate User with user name \"" + userName + "\".", t);
}
return user;
}
これは動作しますので、今、私はそれを行うための正しい方法を探しています。 1つは、プロパティー・ファイルにこのデフォルトの管理ユーザーの信任状を定義し、loadUserByUsername(String userName)内のそのプロパティー・ファイルを読み取り、admnユーザー・オブジェクトを構成することです。しかし、私はSpring Security xmlの設定でこれを行う方法があることを願っています。私はsecurity:user name="admin" password="admin" authorities="ADMINISTRATOR"
を試みたが、それは明らかにあなたが持っているときは動作しませんsecurity:authentication-provider user-service-ref="customUserDetailsService"
マイ春-のsecurity.xml
<security:http auto-config="true" use-expressions="true" access-denied-page="/denied">
<security:intercept-url pattern="/login.html" access="permitAll"/>
<security:intercept-url pattern="/style/**" access="permitAll"/>
<security:intercept-url pattern="/user**" access="hasRole('ADMINISTRATOR')"/>
<security:intercept-url pattern="/**" access="hasRole('AUTHOR')"/>
<security:form-login login-page="/login.html"
login-processing-url="/j_spring_security_check"
authentication-failure-url="/login.html?failedAttempt=true"
default-target-url="/home.html"/>
<security:logout invalidate-session="true"
logout-success-url="/login"
logout-url="/logout"/>
</security:http>
<security:authentication-manager>
<security:authentication-provider user-service-ref="customUserDetailsService">
<security:password-encoder ref="passwordEncoder"/>
</security:authentication-provider>
</security:authentication-manager>
<bean class="org.springframework.security.authentication.encoding.Md5PasswordEncoder" id="passwordEncoder"/>
<bean id="customUserDetailsService" class="com.modelsite.services.impl.SpringSecurityUserDetailsServiceImpl"/>
そこで質問です:私は、ログインすることができ、デフォルトのadminユーザーを定義しますどのように、ものをする。注意してください、私はセットアップ時にsqlインポートでこれを処理したくありません。
ありがとう、Ralph。それは動作し、私の問題を解決します。 ''タグは私のためには機能しませんでしたが、セキュリティの名前空間 ''を使用してトリックを行いました。 –
jacekn
アプリケーションを使用してユーザーを作成した後で2番目の認証プロバイダを削除できない限り、これは非常に悪い考えで、常にadmin:adminユーザーを持つためです。 – aweigold
@jacekn:私の誤り私はそれを訂正しました – Ralph