Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 404状态,而不是返回令牌!为什么?_Java_Spring Mvc_Spring Security_Jwt_Http Status Code 404 - Fatal编程技术网

Java 404状态,而不是返回令牌!为什么?

Java 404状态,而不是返回令牌!为什么?,java,spring-mvc,spring-security,jwt,http-status-code-404,Java,Spring Mvc,Spring Security,Jwt,Http Status Code 404,我正在使用Hibernate和SpringBoot编写一个SpringMVC应用程序。我决定将Spring Security与JWT连接起来。我按照教程做了所有事情,但结果不是返回令牌,而是得到了404状态。为什么?如何修复它 配置: @配置 公共类SecurityConfig扩展了WebSecurity配置适配器{ @自动连线 public void setJwtTokenProvider(JwtTokenProvider JwtTokenProvider){ this.jwtTokenPro

我正在使用Hibernate和SpringBoot编写一个SpringMVC应用程序。我决定将Spring Security与JWT连接起来。我按照教程做了所有事情,但结果不是返回令牌,而是得到了
404
状态。为什么?如何修复它

配置:

@配置
公共类SecurityConfig扩展了WebSecurity配置适配器{
@自动连线
public void setJwtTokenProvider(JwtTokenProvider JwtTokenProvider){
this.jwtTokenProvider=jwtTokenProvider;
}
//田地
//
私有JwtTokenProvider JwtTokenProvider;
//
@豆子
@凌驾
公共AuthenticationManager authenticationManagerBean()引发异常{
返回super.authenticationManagerBean();
}
@凌驾
受保护的无效配置(HttpSecurity http)引发异常{
http
.cors().disable().csrf().disable()
.httpBasic().disable()
.sessionManagement().sessionCreationPolicy(sessionCreationPolicy.STATELESS)
.及()
.授权请求()
.antMatchers(“/auth/login”).permitAll()
.anyRequest().authenticated()
.及()
.应用(新JwtConfigurer(jwtTokenProvider));
}
}
控制器:

@RequiredArgsConstructor
@RestController(value=“/auth”)
公共类身份验证控制器{
//田地
//
私人最终身份验证经理AuthenticationManager;
私有最终JwtTokenProvider JwtTokenProvider;
专用最终用户服务用户服务;
//
//获取方法
//
//
@后映射(“/login”)
公共响应身份登录(@RequestBody AuthenticationRequestDTO requestDto){
试一试{
String login=requestDto.getLogin();
身份验证管理器
.authenticate(新用户名PasswordAuthenticationToken(登录名,requestDto.getPassword());
User=userService.findByLogin(登录名);
String token=jwtTokenProvider.createToken(登录名,user.getRole());
Map response=newhashmap();
response.put(“login”,login);
response.put(“token”,token);
返回ResponseEntity.ok(响应);
}捕获(身份验证异常e){
抛出新的BadCredentialsException(“无效登录或密码”);
}
}
}
JwtTokenProvider:

@组件
公共类JwtTokenProvider{
//田地
//
私有最终用户详细信息服务用户详细信息服务;
@值(${jwt.token.secret}”)
私人字符串秘密;
@值(${jwt.token.expired}”)
私有长有效性;
//
//方法
//
/**
*BCrypt
*/
@豆子
公共BCryptPasswordEncoder passwordEncoder(){
返回新的BCryptPasswordEncoder(8);
}
@施工后
受保护的void init(){
secret=Base64.getEncoder().encodeToString(secret.getBytes());
}
/**
*生成令牌
*
*@param登录
*@param角色
*@返回令牌
*/
公共字符串createToken(字符串登录,角色){
Claims Claims=Jwts.Claims().setSubject(登录);
声明.put(“角色”,getRoleName(角色));
现在日期=新日期();
日期有效期=新日期(now.getTime()+validityInMillics);
返回Jwts.builder()
.setClaims(索赔)
.setIssuedAt(现在)
.setExpiration(有效期)
.signWith(SignatureAlgorithm.HS256,秘密)
.compact();
}
公共身份验证getAuthentication(字符串令牌){
UserDetails UserDetails=this.userDetailsService.loadUserByUsername(getLogin(令牌));
返回新的UsernamePasswordAuthenticationToken(userDetails,“,userDetails.getAuthories());
}
公共字符串getLogin(字符串令牌){
返回Jwts.parser();
}
公共布尔validateToken(字符串标记){
试一试{
Jws claims=Jwts.parser().setSigningKey(secret).parseClaimsJws(token);
如果(claims.getBody().getExpiration().before(new Date())){
返回false;
}
返回true;
}捕获(JwtException | IllegalArgumentException e){
抛出新的JwtAuthenticationException(“JWT令牌已过期或无效”);
}
}
公共字符串解析令牌(HttpServletRequest请求){
字符串bearerToken=req.getHeader(“授权”);
if(bearerToken!=null&&bearerToken.startsWith(“Bearer_”)){
返回bearerToken.substring(7,bearerToken.length());
}
返回null;
}
私有字符串getRoleName(角色){
字符串roleName=role.name();
返回roleName;
}
}

注意:我根据数据库中的条目输入正确的
密码
登录
。如果我输入另一个链接,它将返回
403


(所以问题是我甚至没有通过这个断点!如果我没有到达那个地方,我怎么能通过它!我得到一个
404
错误)

如果你没有使用tomcat embedded,试着在你的URL之前添加项目名。前任:
http://localhost:8080/project-name/auth/login

我设置了一个断点并开始调试,但它不起作用,控制台是空的,应用程序没有停止调试,这意味着应用程序没有达到这一点,所以问题是我甚至没有通过这个断点!如果我到不了那个地方,我怎么能渡过难关!我得到一个404错误!!这意味着该问题与令牌无关,它与资源有关,意味着您定义的URL,否则断点应为work404未找到。。。使用/Auth1时,问题可能在cors和csrf中?