当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring Boot将jwt令牌传递到header?[副本]

羊柏
2023-03-14

我用spring boot和React创建了一个简单的应用程序。我在日志时从后端获得了jwt令牌。我需要在自动传递头部后使用该令牌访问数据。(如bellow postmon ss)

这是我的react代码

useEffect(()=>{
    const config ={
        headers:{
            Authorization: 'Bearer '+ localStorage.getItem('token')
        }
    }
    axios.get('http://localhost:8090/dashboard',config).then(res=>{
        console.log(res);
    })
})

这是我的spring控制器类

@RestController
@CrossOrigin(origins = "http://localhost:3000")
public class AuthController {

@Autowired
private UserRepository userRepository;

@Autowired
private AuthenticationManager authenticationManager;

@Autowired
private UserService userService;

@Autowired
private JwtUtils jwtUtils;

@GetMapping("/dashboard")
public String testingToken(){
    return "Welcome to dashboard.";
}


@PostMapping("/register")
private ResponseEntity<?> subscribeClient(@RequestBody AuthenticationRequest authenticationRequest){
    String userName = authenticationRequest.getUserName();
    String password = authenticationRequest.getPassword();
    String userType = authenticationRequest.getUserType();

    Users userModel = new Users();
    userModel.setUserName(userName);
    userModel.setPassword(password);
    userModel.setUserType(userType);

    try{
        userRepository.save(userModel);
    }catch (Exception e){
        return ResponseEntity.ok(new AuthenticationResponse("Error while subscription."+ userName));
    }

    return ResponseEntity.ok(new AuthenticationResponse("Successfully authenticated."+ userName));
}

@PostMapping("/login")
private ResponseEntity<?> authenticateClient(@RequestBody AuthenticationRequest authenticationRequest){
    String userName = authenticationRequest.getUserName();
    String password = authenticationRequest.getPassword();

    try {
        authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(userName,password));
    }catch (Exception e){
        return ResponseEntity.ok(new AuthenticationResponse("Error during client authentication."+ userName));
    }

    UserDetails userDetails = userService.loadUserByUsername(userName);
    String generatedToken = jwtUtils.generateToken(userDetails);

    return ResponseEntity.ok(new AuthenticationResponse(generatedToken));
}

}

当我运行这个时,控制台结果是

Access to XMLHttpRequest at 'http://localhost:8090/dashboard' from origin 
'http://localhost:3000' has been blocked by CORS policy: 
Response to preflight request doesn't pass access control check: 
No 'Access-Control-Allow-Origin' header is present on the requested resource.

怎么解决这个?

共有1个答案

卢晟
2023-03-14

如果您还没有尝试过,请尝试创建一个扩展BasicAuthenticationFilter并重写doFilterInternal()方法的类,使用request参数,使用getHeader()和log读取header。查找您支持的获取令牌的格式是否正确。

在React代码中,也使用日志并交叉检查LocalStorage.getItem('token')是否返回有效的令牌(承载您的密钥)

 类似资料:
  • 我正在使用PyJWT库(导入jwt)库生成用于身份验证的JSON web令牌。 最初的设计让我们通过URL传入令牌,比如http://example.net?token=EYKDFKDFKDNDFK... 但是,使用此解决方案,似乎任何查看URL中的令牌的人都可以使用此令牌访问站点。

  • 我想允许用户重置他们的密码。为了做到这一点,我首先检查他们的电子邮件是否存在于数据库中,如果存在,我向他们发送一封电子邮件,其中包含指向重置密码页面的链接。为了确保链接是安全的,后者是用jwt令牌制作的,该令牌仅对15mn有效。 但是,无法访问该url,因为有“.”在jwt中: < code > http://www . myapp . com/reset-password/eyjhbgcioin

  • 我想使用各种字段,如客户令牌,客户ID等在每个会话中创建的沃森助手v2使用nodejs。 我可以直接在createSession函数中传递它,还是需要创建一个实体或意图,以便它传入Watson Assistant?

  • 我们希望使用SpringOAuth2JWT令牌支持。我们的架构如下:Spring只提供了一个REST接口,前端由AngularJS构建,AngularJS查询Spring REST接口。出于授权目的,我们的前端团队希望使用JWT。因此,我查看了SpringOAuth2JWT支持,但仍然不知道如何与前端讨论JWT令牌。在阅读了一些教程后,我实现了以下内容: 我不确定工作流程如何。我猜:前端访问/oa

  • 我有两个Rest终点。 -身份提供程序,在用户通过用户名/密码的身份验证后,发送JWT令牌作为响应。 -接受上述JWT令牌作为头,对其进行验证,如果令牌有效,则发送用户JSON作为响应。 我已经使用Angular2创建了我的UI null