我正在尝试用一个小页面实现JWT,我遇到了问题"圆形视图路径"。我读到它可以通过spring-boot-starter-thymeleaf解决,但后来我得到了#34;错误解析模板"
UserController中
@Controller
public class UserController {
private UserRepository userRep;
private BCryptPasswordEncoder bCryptPasswordEncoder;
public UserController (UserRepository applicationUserRepository,
BCryptPasswordEncoder bCryptPasswordEncoder) {
this.userRep = applicationUserRepository;
this.bCryptPasswordEncoder = bCryptPasswordEncoder;
}
// Especificamos el endpoint para realizar el registro, y el parámetro
// necesario (tipo Usuario) que debe de estar completamente formado
@RequestMapping(value = "/registraUsuario", method=RequestMethod.POST)
public void registraUsuario (@RequestBody Usuario usuario) {
usuario.setPassword(bCryptPasswordEncoder.encode(usuario.getPassword()));
userRep.save(usuario);
}
}
UserRepository
@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UserRepository extends JpaRepository<Usuario, Long> {
Usuario findByEmail(String mail);
}
的UserDetailsService
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
private UserRepository applicationUserRepository;
public UserDetailsServiceImpl(UserRepository applicationUserRepository) {
this.applicationUserRepository = applicationUserRepository;
}
@Override
public UserDetails loadUserByUsername(String mail) throws UsernameNotFoundException {
Usuario applicationUser = applicationUserRepository.findByEmail(mail);
if (applicationUser == null) {
throw new UsernameNotFoundException(mail);
}
return new User(applicationUser.getEmail(), applicationUser.getPassword(), emptyList());
}
}
任何想法。提前致谢
答案 0 :(得分:0)
解决。似乎问题是UserController有@RequestMapping(value =&#34; / registraUsuario&#34;,它与SecurityConstants文件中的SIGN_UP_URL相同
public class SecurityConstants {
public static final String SECRET = "SecretKeyToGenJWTs";
public static final long EXPIRATION_TIME = 864_000_000; // 10 days
// Cabeceras para probar con el postman
public static final String TOKEN_PREFIX = "Bearer ";
public static final String HEADER_STRING = "Permiso";
// Aquí iría la URL donde se registra el ususario en nuestra página
public static final String SIGN_UP_URL = "/registraUsuario";
}
这就是创造循环。我更改了SIGN_UP_URL =&#34; / usuario / registraUsuario&#34;的名称,并将@RequestMapping(&#34; / usuario&#34;)添加到userController,现在没有问题。最后,这是我已经更改的那两个文件的最终代码
<强> UserController中强>
@Controller
@RequestMapping("/usuario")
public class UserController {
private UserRepository userRep;
private BCryptPasswordEncoder bCryptPasswordEncoder;
public UserController (UserRepository applicationUserRepository,
BCryptPasswordEncoder bCryptPasswordEncoder) {
this.userRep = applicationUserRepository;
this.bCryptPasswordEncoder = bCryptPasswordEncoder;
}
// Especificamos el endpoint para realizar el registro, y el parámetro
// necesario (tipo Usuario) que debe de estar completamente formado
@RequestMapping(value = "/registraUsuario", method=RequestMethod.POST)
@ResponseStatus(HttpStatus.OK)
public void registraUsuario (@RequestBody Usuario usuario) {
usuario.setPassword(bCryptPasswordEncoder.encode(usuario.getPassword()));
userRep.save(usuario);
}
}
<强> SecurityConstants 强>
public class SecurityConstants {
public static final String SECRET = "SecretKeyToGenJWTs";
public static final long EXPIRATION_TIME = 864_000_000; // 10 days
// Cabeceras para probar con el postman
public static final String TOKEN_PREFIX = "Bearer ";
public static final String HEADER_STRING = "Permiso";
// Aquí iría la URL donde se registra el ususario en nuestra página
public static final String SIGN_UP_URL = "/usuario/registraUsuario";
}
希望这有帮助。