SpringSecurityを使用してSpringMVCで便利なフォームログインを作成するのに行き詰まりました。私はこれとHibernateの初心者です。Webアプリケーションへのアクセスを提供できる簡単なフォームログインを作成したいと思います。
SpringSource Tool Suiteを使用し、SpringTemplateProjectを選択してプロジェクトを作成しました。これはMavenを使用しており、アノテーションとを使用してHibernateクラスによって生成されていhibernate.cfg.xml
ます。私のデータベース(HSQLDB)には、users、roles、users_rolesの3つのテーブルがあります。3つ目はuser_idとrole_idが含まれているため、ユーザーの役割に関する情報が格納されます。Hibernateによるクラスの生成に成功しました。
UserDetailsServiceを実装するクラスを書き始めました。しかし、これを正しく行う方法がわかりません。spring-security.xml
私は次のようにBeanを定義しました:
<bean id="userDetailsService" class="hutter.pl.services.HutterUserDetailsService" />
saltSourceでsha-256によるハッシュを使用したいと思います。
<bean class="org.springframework.security.authentication.dao.ReflectionSaltSource" id="saltSource">
<property name="userPropertyToUse" value="username"/>
</bean>
<security:authentication-manager>
<security:authentication-provider user-service-ref="userDetailsService">
<security:password-encoder hash="sha-256">
<security:salt-source ref="saltSource" />
</security:password-encoder>
</security:authentication-provider>
</security:authentication-manager>
このソリューションを使用する必要があります:https ://stackoverflow.com/a/1654488/845220 ?Hibernateは、RolesHome、Roles、Users、UsersHome、UsersRoles、UsersRolesHomeのようなクラスを生成しました。しかし、これらのHibernatesクラスを使用してユーザーを承認する方法が本当にわかりません。
@Service("userDetailsService")
public class MyUserDetailsService implements UserDetailsService {
@Transactional(readOnly = true)
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UsersHome usersHome = new UsersHome();
//Users user = ...
//...
return null;
}
}
ヒントを教えてください。
編集:クラスにメソッドpublic Users findByLogin(String login)
を
追加しようとしました。UsersHome
public Users findByLogin(String login) {
log.debug("getting Users instance with login: " + login);
try {
Users instance = entityManager.find(Users.class, login);
log.debug("get successful");
return instance;
} catch (RuntimeException re) {
log.error("get failed", re);
throw re;
}
}
そして、私のUserDetailsServiceの本体は次のようになります。
UsersHome usersHome = new UsersHome();
Users user = usersHome.findByLogin(username);
しかし、私は例外を持っています:
ERROR: my.package.dao.UsersHome - get failed
java.lang.NullPointerException
at my.package.dao.UsersHome.findByLogin(UsersHome.java:72)
at my.package.services.HutterUserDetailsService.loadUserByUsername(MyUserDetailsService.java:19)