gpt4 book ai didi

java - 确保特定用户只能看到自己的用户详细信息 - 使用 Spring

转载 作者:行者123 更新时间:2023-12-02 01:31:53 25 4
gpt4 key购买 nike

目前在一个小项目上使用 Spring/Spring security,并且很难实现此功能。理想情况下,我只希望 user1 查看 user1 的详细信息,而不是 2,3 或 4 的详细信息。

我已经使用角色实现了 Spring Security,并了解我可以检索 UserDetails 对象或原则,我不太确定,但我知道我可以使用出现的其中之一检索当前登录用户的详细信息有多种方法。

这是我目前在进入管理/主页时用作概念证明的内容:

Authentication auth = SecurityContextHolder.getContext().getAuthentication();
Gamer gamer = gamerService.findGamerByEmail(auth.getName());

System.out.println("Auth: " + auth.getName());
System.out.println("Gamer: " + gamer.getName() + gamer.getId() + gamer.getEmail());

安全配置负责处理当前用户是否可以由于分配给它的角色而进行访问。

我相信我应该能够访问 /mysite/viewUserDetails 的网址并让该页面显示当前用户的信息,但我找不到任何这样的示例,我已经找到了很多证明登录用户可以查看页面的示例,但没有指定检查以确保 user1 只能查看 user1 的详细信息。

在旧页面上,我这样做是为了显示特定用户的信息,但我知道这是不好的做法-

<a th:href="@{/gamer/{gamerid}/games/excited (gamerid=${gamer.id}) }">

*值得注意的是,这没有使用任何形式的登录/注册来提取此信息,我只是简单地使用作为数据库查询的一部分传入的 ID。

它映射到:

   @RequestMapping("/gamer/{gamerid}/games/excited")
public String getExcited(@PathVariable final Long gamerid, Model model){

addGamerListAttributes(model, gamerid, "EXC");
return "games";
}

所以我的问题变成了,我希望你能指出正确的方向,我如何实现一个解决方案,用户只能查看他/她的详细信息,以及如何通过表单和连接 Controller 作为传递 ID 来表示这一点网址中的内容有点难看(我可以使用 guid,但是......)

提前非常感谢。

最佳答案

这实际上是一个很简单的选择。要么你有一个入口点,例如:

@RequestMapping("/gamer/{gamerid}/games/excited")

并且您手动检查 session 中的用户是否可以访问所请求的资源,或者您有类似的内容

@RequestMapping("/my-games")

自动从安全上下文中读取用户 ID。

这不仅仅是一种安全选择,我会根据代码重用和 future 的用例来选择一个(例如,同一页面/一组页面可以被多个用户看到)。

关于java - 确保特定用户只能看到自己的用户详细信息 - 使用 Spring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55893083/

25 4 0
文章推荐: java - Weblogic 12c 与 Oracle 数据库 18c : setTransactionOnly() called on transaction error
文章推荐: asp.net-core-signalr - SignalR Core 中 SendAsync 和 SendCoreAsync 方法之间的区别?
文章推荐: iis - 安装了 IIS,但出现空白页面,并且未显示在 Windows 服务列表中
文章推荐: java - 如何通过某些属性将 List 分组到另一个 List