gpt4 book ai didi

java - 将用户添加到 session 并使用 spring 将其获取到实体中

转载 作者:行者123 更新时间:2023-12-02 03:01:13 24 4
gpt4 key购买 nike

我正在使用 spring 和 jersey2 来服务一些休息请求,例如:

@GET
@Path("/someservice")
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
public String getSomeStuff(...) {
login(...);
// ...
}

在休息请求期间,我获得了休息请求的授权用户。

现在我在更新或创建实体时需要此用户,例如:

@MappedSuperclass
public abstract class PersistentObject {

@PrePersist
@PreUpdate
public void onSaveOrUpdate() {
setCreationUser(...); // How to get the user of this session?
}

// ...

}

如何获取剩余请求的当前用户?

最佳答案

您可以尝试在 ContainerRequestFilter 中执行登录操作(针对适当的资源方法)并设置SecurityContext :

@Provider
public class SecurityFilter implements ContainerRequestFilter {

@Override
public void filter(final ContainerRequestContext context) throws IOException {
final Principal user = login(...);

context.setSecurityContext(new SecurityContext() {

public Principal getUserPrincipal() {
return user;
}

// Other methods omitted.
});
}
}

确保您有 jersey-spring3类路径上的模块和 Jersey-Spring 集成允许您将 SecurityContext 注入(inject) Spring 服务:

@Service
public MySpringService implements MyService {

@Context
private SecurityContext context;

public String doStuff() {
final Principal user = context.getUserPrincipal();

// ...
}
}

如果您想要在其中使用用户主体的服务既不受 Jersey 也不由 Spring 管理,则无法执行此操作。

关于java - 将用户添加到 session 并使用 spring 将其获取到实体中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24768101/

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