Hibernateを介してユーザーをDBテーブルに保存し、SpringSecurityを使用して認証します。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.*;
import org.springframework.security.config.annotation.authentication.builders.*;
import org.springframework.security.config.annotation.web.configuration.*;
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}
}
これは完全に機能しますが、ポイントがあります。サーバーの起動時にユーザーが読み込まれます。実行時にSpringSecurityに新しいユーザーを追加するメソッドRegisterUser(User user)を作成する必要があります。このメソッドは、このタスクのみに焦点を当てる必要があります。この機能の実装を開始する方法がわからないので、アドバイスをありがとう! ;)
Ofcユーザーには、ログイン、パスワード、役割文字列などのフィールドがあります。
SpringMVCでソリューションを投稿しないでください。このシステムは、バージョン4.0.xのSpring WebBoostとSpringSecurityBoostを使用するRESTfulアプリです。
ユーザーが登録している場合は、メモリではなくデータベースにユーザーを保存することをお勧めします:)
ユーザー用に 権限 を作成します
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
ユーザーをインスタンス化します(実装するクラスを使用して serDetails )
UserDetails user = new User("[email protected]", passwordEncoder.encode("s3cr3t"), authorities);
ユーザーを便利な場所に保存します。 JdbcUserDetailsManager は、ユーザーをデータベースに簡単に保存できます。
userDetailsManager.createUser(user);
sernamePasswordAuthenticationToken を作成します
Authentication authentication = new UsernamePasswordAuthenticationToken(user, null, authorities);
認証を SecurityContext に追加します
SecurityContextHolder.getContext().setAuthentication(authentication);
このコードを使用して、現在のユーザーに権限を追加します。
List<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(new SimpleGrantedAuthority("ROLE_NEWUSERROLE');
SecurityContextHolder.getContext().setAuthentication(
new UsernamePasswordAuthenticationToken(
SecurityContextHolder.getContext().getAuthentication().getPrincipal(),
SecurityContextHolder.getContext().getAuthentication().getCredentials(),
authorities)
);