Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在SpringMVC应用程序中实现Spring安全性?_Java_Model View Controller_Spring Security_Jwt_Thymeleaf - Fatal编程技术网

Java 如何在SpringMVC应用程序中实现Spring安全性?

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

我是新来的春天安全。我已经实现了spring安全性并生成了JWT令牌。现在我需要从令牌中获取用户并在会话中设置它,以便该用户的会话保持到令牌过期或注销为止。另一方面,我需要从控制器访问API,但是spring安全性不允许在没有JWT令牌的情况下访问API。通过全局设置JWT令牌或在会话中为所有请求设置JWT令牌,是否可以访问控制器中的API

这是我到现在为止尝试过的

  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令牌吗?我知道这看起来很容易,但保持状态很难。这是一篇好文章