gpt4 book ai didi

java - Spring mvc中如何管理Session

转载 作者:行者123 更新时间:2023-11-30 03:09:22 25 4
gpt4 key购买 nike

我的问题是这样的:我需要使用 Spring mvc 实现登录/注销功能。我的方法如下。我有一个 LoginController 来处理 get 和 post 方法。

@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login(Model model) {
if (sessionController.getSessionUserDto() != null) {
return "redirect:/secure/admin/index";
}
UserDto dto = new UserDto();
model.addAttribute("userDto", dto);

return "/login";
}

我有一个 SessionController,它是一个 session 范围的 bean,用于保存用户凭据。这是我的 POST 方法。

@RequestMapping(value = "/login", method = RequestMethod.POST)
public String executeLogin(@ModelAttribute("userDto") UserDto userDto, BindingResult result,
HttpServletRequest request) {
String[] suppressedFields = result.getSuppressedFields();
if (suppressedFields.length > 0) {
throw new RuntimeException("Attempting to bind disallowed fields: "
+ StringUtils.arrayToCommaDelimitedString(suppressedFields));
}

if (userDto.getUser() == null || userDto.getUser().isEmpty()) {
return "/login";
}

if (userDto.getPassword() == null || userDto.getPassword().isEmpty()) {
return "/login";
}

try {
UserDto dto = userManager.login(userDto.getUser(), userDto.getPassword());
if (dto != null) {
sessionController.setSessionUserDto(dto);
request.getSession().setAttribute("terminal", request.getRemoteAddr());
return "redirect:/secure/admin/index";
} else {
return "/login";
}
} catch (DaoException ex) {
System.out.println("DaoException: " + ex.getMessage());
return "redirect:/login";
}
}

问题是每个登录系统的用户总是会覆盖 SessionController 中存储的用户。也就是说,sessionController 只为整个应用程序保留一个用户。如果我登录机器A,然后打开机器B并请求 http://localhost:8080/webapp/login ,我将被重定向到索引,就像我被记录一样。所以我该怎么做?

最佳答案

我强烈建议您使用 Spring Security。您可以使用默认配置并对您的应用程序进行身份验证。

http://www.mkyong.com/tutorials/spring-security-tutorials/ https://docs.spring.io/spring-security/site/docs/3.0.x/reference/springsecurity.html

如果您需要自定义身份验证,则需要使用身份验证提供程序。这里有一个例子

http://www.baeldung.com/spring-security-authentication-provider

关于java - Spring mvc中如何管理Session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33942106/

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