我用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.
怎么解决这个?
如果您还没有尝试过,请尝试创建一个扩展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