問題が発生しました。SpringブートによるRest ApplicationとSpringセキュリティによるURLの安全なアクセスがあります。RESTでSpringブートを使用してSpring Securityにユーザーロールを更新する方法
この構成は
@Override
protected void configure(AuthenticationManagerBuilder auth) {
try {
montarPermissoesByUsuario(auth);
} catch (Exception e) {
e.printStackTrace();
}
}
public void montarPermissoesByUsuario(AuthenticationManagerBuilder auth) throws Exception {
Set<CsUsuario> usuarios = serviceUsuario.findUsuariosApp();
for (CsUsuario csUsuario : usuarios) {
auth.inMemoryAuthentication().withUser(csUsuario.getUsername()).password(csUsuario.getPassword())
.roles(this.montarRoles(csUsuario));
}
}
public String[] montarRoles(CsUsuario usuario) {
String[] roles = null;
for (CsGrupo grupo : usuario.getGrupos()) {
roles = grupo.getServicosApp().stream().map(CsServicoApp::getRegra).toArray(String[]::new);
}
return roles;
}
とばねデータJPA WebSecurityConfigurerAdapterを拡張するクラスで
public interface CsUsuarioRepository extends JpaRepository<CsUsuario, String>{
public CsUsuario findByUsername(@Param("username") String username);
@Query(value = CsUsuarioQuery.USUARIO_APP, nativeQuery = true)
public Set<CsUsuario> findUsuariosApp();
}
からのデータベースのアクセスです。
しかし、このコードにユーザーと役割を含めるのではなく、一部のシステムでユーザーの固有のデータベースを使用しているため、基本データから取得します。
私の問題は、Springブートでアプリケーションを起動したときにのみ動作し、データベースからの構成であってもユーザーがロールを更新しても、起動後にSpringブートが更新されないということです。
誰かが既にこのシナリオでSpring Bootを使用しているかどうか、もしこれが可能なら、私は知っています。
研究では、Rest ControllerによってBeanのInMemoryUserDetailsManagerを更新するいくつかの実装を見つけました。この場合は、役割を更新するためにInMemoryUserDetailsManagerのRest ControllerにPUTを実装する必要がありますか?
ありがとうございます!
メモリユーザーデータではなくデータベースを使用することを検討しましたか?データベースを使用してユーザーと役割を格納する場合は、既存のユーザーの新しい役割を更新して保存する方が簡単です –
こんにちは、返信いただきありがとうございます。これが問題です。私がデータベースに変更を加えたら、Spring Bootは自分の役割を更新しません。 –
データベースからのデータへのアクセス方法のコードを共有できますか。チャーチの技術を使用していますか? – Alekhya