Spring boot 为什么我的代码不给注册用户的邮递员结果中的jwtToken
我正在使用spring boot和jwt构建简单的curd应用程序。当我使用postman ContentType/json注册用户时,当我提交所有详细信息时,我得到响应所有详细信息用户详细信息,代码为201,但 token=null,我得到。 在这里我添加了jwt过滤器和用户控制器文件,请检查并帮助我在哪里丢失了代码 这是我的密码 JwtTokenProvider 用户控制器Spring boot 为什么我的代码不给注册用户的邮递员结果中的jwtToken,spring-boot,spring-security,jwt,Spring Boot,Spring Security,Jwt,我正在使用spring boot和jwt构建简单的curd应用程序。当我使用postman ContentType/json注册用户时,当我提交所有详细信息时,我得到响应所有详细信息用户详细信息,代码为201,但 token=null,我得到。 在这里我添加了jwt过滤器和用户控制器文件,请检查并帮助我在哪里丢失了代码 这是我的密码 JwtTokenProvider 用户控制器 @RestController 公共类用户控制器{ @自动连线 私有JwtTokenProvider tokenPro
@RestController
公共类用户控制器{
@自动连线
私有JwtTokenProvider tokenProvider;
@自动连线
私人用户服务;
@自动连线
私人产品服务;
@自动连线
私人交易服务交易服务;
@后期映射(“/api/用户/注册”)
公共响应性寄存器(@RequestBody User){
if(userService.findByUsername(user.getUsername())!=null){
返回新的ResponseEntity(HttpStatus.CONFLICT);
}
//默认角色。
user.setRole(Role.user);
返回新的响应属性(userService.saveUser(user),HttpStatus.CREATED);
}
@GetMapping(“/api/user/login”)
公共响应getUser(主要负责人){
//principal=httpServletRequest.getUserPrincipal。
if(principal==null){
//注销也将在此处使用,因此我们应该返回ok http状态。
返回响应性。ok(委托人);
}
UsernamePasswordAuthenticationToken authenticationToken=
(UsernamePasswordAuthenticationToken)主体;
User User=userService.findByUsername(authenticationToken.getName());
user.setToken(tokenProvider.generateToken(authenticationToken));
返回新的响应属性(用户,HttpStatus.OK);
}
请帮帮我。有几件事需要注意
JwtTokenProvider
类。因此,永远不会生成令牌
请尝试以下操作:
@PostMapping("/api/user/registration")
public ResponseEntity<String> register(@RequestBody User user){
if(userService.findByUsername(user.getUsername())!=null){
return new ResponseEntity<>(HttpStatus.CONFLICT);
}
//default role.
user.setRole(Role.USER);
userService.saveUser(user);
// I am not sure if this is really correct, but it should do it... Otherwise, change this method.
UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(user.getUsername(), user.getRoles());
String token = tokenProvider.generateToken(user);
return ResponseEntity.ok(token);
}
@PostMapping(“/api/user/registration”)
公共响应性寄存器(@RequestBody User){
if(userService.findByUsername(user.getUsername())!=null){
返回新的ResponseEntity(HttpStatus.CONFLICT);
}
//默认角色。
user.setRole(Role.user);
userService.saveUser(用户);
//我不确定这是否真的正确,但它应该这样做…否则,改变这个方法。
UsernamePasswordAuthenticationToken auth=新的UsernamePasswordAuthenticationToken(user.getUsername(),user.getRoles());
String token=tokenProvider.generateToken(用户);
返回ResponseEntity.ok(令牌);
}
你应该有一个输出
第二:使用标题
如果您有第一个带有令牌的输出,那么您可以尝试将令牌添加到标头中,或任何您想要的位置。请尝试一下,让我知道。什么类调用您的
JwtTokenProvider
?您有控制器吗?过滤器?我添加了控制器和jwtfilte文件请立即检查@RUARO Thibault2
public class JWTAuthorizationFilter extends BasicAuthenticationFilter {
private JwtTokenProvider jwtTokenProvider;
public JWTAuthorizationFilter(AuthenticationManager authenticationManager,
JwtTokenProvider tokenProvider) {
super(authenticationManager);
jwtTokenProvider = tokenProvider;
}
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain chain)
throws IOException, ServletException {
Authentication authentication = jwtTokenProvider.getAuthentication(request);
if(authentication !=null && jwtTokenProvider.validateToken(request)){
SecurityContextHolder.getContext().setAuthentication(authentication);
}
chain.doFilter(request, response);
}
}
@RestController
public class UserController {
@Autowired
private JwtTokenProvider tokenProvider;
@Autowired
private UserService userService;
@Autowired
private ProductService productService;
@Autowired
private TransactionService transactionService;
@PostMapping("/api/user/registration")
public ResponseEntity<?> register(@RequestBody User user){
if(userService.findByUsername(user.getUsername())!=null){
return new ResponseEntity<>(HttpStatus.CONFLICT);
}
//default role.
user.setRole(Role.USER);
return new ResponseEntity<>(userService.saveUser(user), HttpStatus.CREATED);
}
@GetMapping("/api/user/login")
public ResponseEntity<?> getUser(Principal principal){
//principal = httpServletRequest.getUserPrincipal.
if(principal == null){
//logout will also use here so we should return ok http status.
return ResponseEntity.ok(principal);
}
UsernamePasswordAuthenticationToken authenticationToken =
(UsernamePasswordAuthenticationToken) principal;
User user = userService.findByUsername(authenticationToken.getName());
user.setToken(tokenProvider.generateToken(authenticationToken));
return new ResponseEntity<>(user, HttpStatus.OK);
}
@PostMapping("/api/user/registration")
public ResponseEntity<String> register(@RequestBody User user){
if(userService.findByUsername(user.getUsername())!=null){
return new ResponseEntity<>(HttpStatus.CONFLICT);
}
//default role.
user.setRole(Role.USER);
userService.saveUser(user);
// I am not sure if this is really correct, but it should do it... Otherwise, change this method.
UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(user.getUsername(), user.getRoles());
String token = tokenProvider.generateToken(user);
return ResponseEntity.ok(token);
}