0
내 응용 프로그램에서 감사를 구현 중입니다. 지금까지 나는 감사 테이블에 활동과 레코드를 기록하는 데 성공했습니다. 문제는 내가 사용자를 구현할 수 없다는 것입니다. 여러 곳에서 연구했는데, 간단하다는 것을 압니다. 아마도 뭔가를 보지 못했을 수도 있습니다. 그리고이 시점에서 저를 도울 수 있습니다. Spring 부팅을 사용하여 최대 절전 모드 Envers와 개정 엔터티 클래스 을 사용하고 있습니다. 리비전 리스너를 사용하여 감사에서 사용자를 설정하는 방법
이
내가 사용자에게 얻을 나의 클래스입니다@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 빈과 스프링 5.1을 주입하기위한 스프링 계획을 주입 할 수 있습니다. – Naros