我有profilecontroller,它必须通过springsecurityusername获取Map。
@Controller
public class ProfileController {
@GetMapping("/profile/{profileName}")
public String showProfilePage(@PathVariable("profileName")String profileName){
return "profile";
}
}
我有这样的动态链接在网站的标题,所以用户可以随时点击它
<a th:href="@{/profile/{name}(name=${username})}">profile</a>
所以如果我想使用link,我必须在每个classcontroller中找到每个time用户
@Controller
public class SearchController {
@Autowired
UserService userService;
@GetMapping("/")
public String showIndexPage(Model model){
User user = userService.findUserByUsername(someNameFromSecurityHandler);
model.addAttribute("username",user.getUsername());
return "index";
}
每次我都要找到这个链接的用户。如果我想优化这个东西我该怎么办。因为我认为每次在数据库中查找用户都是个坏主意,因为人们通常不会使用配置文件页面,这只是额外的时间开销。我在每个controll类中都创建了这个代码。
1条答案
按热度按时间q1qsirdb1#
我假设您正在使用springsecurity来保护mvc应用程序(您提到了springsecurityusername,但并不清楚)。
如果上述为真,那么您的身份验证主体将已经包含在会话中(假设您已经登录)。您只需按以下方式访问它:
另外,您可以直接从thymeleaf访问spring的安全细节,而不是从控制器设置它(未测试,但也是可能的)https://github.com/thymeleaf/thymeleaf-extras-springsecurity). 您将需要以下依赖项:
然后,在thymeleaf中可以执行以下操作: