gpt4 book ai didi

java - 如何使用修订监听器在审核中设置用户

转载 作者:太空宇宙 更新时间:2023-11-04 10:50:49 27 4
gpt4 key购买 nike

我正在我的应用程序中实现审核。到目前为止我已经成功地记录了审计表中的 Activity 和记录。问题是我无法实现用户。我研究了很多地方,我知道这很简单,也许我只是没有看到一些东西,此时你可以帮助我。我正在使用 Hibernate Envers 和修订实体类我正在使用 Spring boot。

这是我得到用户的类(class)

@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;
}

}
}

我的类(class) 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 中提取,并且如何获取用户名取决于您的显式实现。

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);
}
}

关于java - 如何使用修订监听器在审核中设置用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47887908/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com