Java 如何在SpringMVC应用程序中实现Spring安全性?
我是新来的春天安全。我已经实现了spring安全性并生成了JWT令牌。现在我需要从令牌中获取用户并在会话中设置它,以便该用户的会话保持到令牌过期或注销为止。另一方面,我需要从控制器访问API,但是spring安全性不允许在没有JWT令牌的情况下访问API。通过全局设置JWT令牌或在会话中为所有请求设置JWT令牌,是否可以访问控制器中的API 这是我到现在为止尝试过的Java 如何在SpringMVC应用程序中实现Spring安全性?,java,model-view-controller,spring-security,jwt,thymeleaf,Java,Model View Controller,Spring Security,Jwt,Thymeleaf,我是新来的春天安全。我已经实现了spring安全性并生成了JWT令牌。现在我需要从令牌中获取用户并在会话中设置它,以便该用户的会话保持到令牌过期或注销为止。另一方面,我需要从控制器访问API,但是spring安全性不允许在没有JWT令牌的情况下访问API。通过全局设置JWT令牌或在会话中为所有请求设置JWT令牌,是否可以访问控制器中的API 这是我到现在为止尝试过的 UsernamePasswordAuthenticationToken authenticationToken=new Use
UsernamePasswordAuthenticationToken authenticationToken=new UsernamePasswordAuthenticationToken(loginRequest.getUserName(), loginRequest.getPassword());
Authentication authentication = this.authenticationManager.authenticate(authenticationToken);
SecurityContextHolder.getContext().setAuthentication(authentication);
String jwt = tokenProvider.generateToken(authentication);
logger.info("jwt is:"+jwt);
logger.info("authentication:"+authentication.getName());
User user2 = new User();
user2.setUserFirstName(user.getFirstName());
user2.setUserLastName(user.getLastName());
request.getSession().setAttribute("loggedInUser",user2);
request.getSession().setMaxInactiveInterval(60);
request.getSession().setAttribute("menu", MenuUtils.buildMenu(user2));
return "home";
我在登录用户时执行此操作。我在前端使用了Thymeleaf
提前谢谢你的帮助 访问API时,需要将jwt令牌添加到请求头中:
headers.add(HttpHeaders.AUTHORIZATION, "Bearer " + jwt);
这允许api读取标题,并检查用户及其权限
您不需要在会话中存储用户。令牌本身有一个到期日,每次请求时都应将其从浏览器发送到服务器 我们可以在不使用请求头的情况下全局设置jwt令牌吗?我知道这看起来很容易,但保持状态很难。这是一篇好文章