我正在申请中实施审核。到目前为止,我已经成功地记录了审计表中的活动和记录。问题是我无法实现用户。我在很多地方研究过,我知道这很简单,也许我只是看不到什么东西,此时你可以帮助我。我正在使用Hibernate Envers和使用Spring启动的Revision Entity类。
这是我的课程,我得到了用户
@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;
}
}
和UserListener
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
中提取,你如何获得username
取决于你的显式实现。
public class UsuarioListener implements RevisionListener {
@Override
public void newRevision(Object revisionEntity) {
// Get username from SecurityContextHolder
// SecurityContextHolder.getContext().getAuthentication();
String usuario = ...
UsuarioRevEntity usuarioRevEntity = (UsuarioRevEntity) revisionEntity;
usuarioRevEntity.setUsuario(usuario);
}
}