gpt4 book ai didi

java - Spring Boot MVC 应用程序中的无效 session (注销)

转载 作者:行者123 更新时间:2023-11-30 05:32:12 25 4
gpt4 key购买 nike

我正在尝试在 Spring MVC 中登录和注销的最简单方法。我是 .NET 人员,当我记得时,我立即在 ASP.NET 中实现了 session 身份验证。现在,我必须使用 Spring MVC,我面临的问题是我在 logout 方法中获得了不同的 session 对象,因此我无法取消它。我正在 login 方法中创建 session 属性,我使用逻辑的位置位于我的 ProductsController 内部。这是代码:

登录方式:

 @PostMapping
@RequestMapping(value = {"login"},method = RequestMethod.POST)
public ResponseEntity Login(@RequestBody @Valid LoginModel user, HttpServletRequest request,HttpSession session){



List<User> userFromDb=service.findByEmailAndPassword(user.getEmail(),user.getPassword());
if(!userFromDb.isEmpty()){
session.setAttribute("loggedInUser", user );
return new ResponseEntity(HttpStatus.OK);
}
return new ResponseEntity(HttpStatus.UNAUTHORIZED);
}

注销方法:

 @GetMapping
@RequestMapping(value = {"logout"},method = RequestMethod.GET)
public ResponseEntity Logout(HttpServletRequest request, SessionStatus
status,HttpSession session, HttpServletResponse response){

session.invalidate();
// request.getSession(true).removeAttribute("loggedInUser");
//
// request.getSession(true).invalidate();
Cookie[] cookies = request.getCookies();
if(cookies!=null) {
for (Cookie cookie : cookies) {
cookie.setMaxAge(0);
cookie.setValue(null);
cookie.setPath("/");
response.addCookie(cookie);
}
}
return new ResponseEntity(HttpStatus.OK);
}

产品 Controller :

RequestMapping(value = {"","/"},method = RequestMethod.GET)
@GetMapping
public ResponseEntity Products(HttpServletRequest request, HttpSession session){

if(session==null || session.getAttribute("loggedInUser")==null){
return new ResponseEntity(HttpStatus.UNAUTHORIZED);
}
List<Product> products= service.getAll();
return new ResponseEntity(products,HttpStatus.OK);
}

我可以登录并且用户已保存在 session 中。但是,当我注销时,我仍然可以访问我的产品页面,这意味着 session 未被清除。

如果这很重要,我将在端口 localhost:3000 上使用 create-react-app 前端在 craeted 上使用 React 应用程序,并且我的服务器位于 localhost 上: 8080

最佳答案

在您的 WebSecurityConfigurerAdapter 配置类(实现)中使用 spring 安全约束和注销配置:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

.
...
...
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/login*").permitAll()
.anyRequest().authenticated()
.anyRequest().authenticated()
....
.
.
.and()
.logout()
.invalidateHttpSession(true)
.deleteCookies("JSESSIONID")

}
...
...
...
}

关于java - Spring Boot MVC 应用程序中的无效 session (注销),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57300597/

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