0
私は自分のアプリケーションで監査を実装しています。これまでのところ、私は活動と記録を監査表に記録するのに成功しました。問題は私がユーザーを実装することができないということです。 私は多くの場所で研究しましたが、私はそれが簡単であることを知っています。何かが見えないかもしれない、そしてこの時点で私を助けることができます。 私はHibernate EnversとRevision Entityクラス を使用しています。私はSpringブートを使用しています。リビジョンリスナーを使用して監査でユーザーを設定する方法
これは私がユーザー
@RestController
public class LoginController {
@Autowired
UsuariosService uService;
@Autowired
PermissoesPaginasService ppService;
@Autowired
EntidadesAdministradoresService eaService;
@Autowired
UsuariosService usuariosService;
@RequestMapping(value = "/autenticar", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, method = RequestMethod.POST)
public LoginResponse autenticar(@RequestBody Usuarios usuarios)
throws ServletException {
// verifica se foram digitados o login e senha no front end
if (usuarios.getLogin() == null
|| usuarios.getSenha() == null) {
throw new ServletException("Nome ou senha obrigatório");
}
// busca no banco de dados
Usuarios usuariosAutenticado = uService.buscarPorLogin(usuarios.getLogin());
if (usuariosAutenticado == null) {
return new LoginResponse("naoEncontrado");
}
// compara a senha vinda do banco de dados com a senha vinda da tela
if (!usuariosAutenticado.getSenha()
.equals(usuarios.getSenha())) {
return new LoginResponse("senhaInvalida");
}
String token = Jwts.builder().setSubject(usuariosAutenticado.getLogin())
.signWith(SignatureAlgorithm.HS512, "digi2fred")
.setExpiration(new Date(System.currentTimeMillis() + 60 * 60 * 1000)).compact();
return new LoginResponse(token);
}
private class LoginResponse {
public String token;
public LoginResponse(String token) {
this.token = token;
}
public String getToken() {
return token;
}
}
}
私のクラスUsuarioRevEntity
@Entity
@Table(name = "usuario_rev_entity", schema = "aud")
@RevisionEntity(UsuarioListener.class)
public class UsuarioRevEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@RevisionNumber
private int id;
@RevisionTimestamp
private long timestamp;
private String usuario;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
}
とUsuarioListener
public class UsuarioListener implements RevisionListener {
public void newRevision(Object revisionEntity) {
UsuarioRevEntity usuarioRevEntity = (UsuarioRevEntity) revisionEntity;
// i guess that here i need to pass user log.
}
}
はい。しかし、 'SecurityContextHolder'を使用するにはいくつかのライブラリが必要ですか?これは私が理解できない部分です。 –
これは、現在ログインしているユーザーに関する情報が格納されているSpring Securityのクラスです。ユーザー名情報はどこにありますか? – lzagkaretos
Fwiw、Hibernate Envers 5.3はあなたのリビジョンリスナーへの依存性注入をサポートしますので、CDI BeanとSpring 5.1を使用してこの注入をサポートするSpringプランを注入できます。 – Naros