java登陆302请求,【Java】spring security 前端登录后,请求后台api报302

问题描述

我在spring boot项目中引入有了spring security来做登录验证这样的事情.因为是前后端分离的项目,所以,我的前端有个这样的登录请求

function login(){

$.ajax({

useDefaultXhrHeader: false,

type:"post",

url:"http://127.0.0.1:8080/user/login",

data:{"userName": document.getElementById("userName").value,

"password":document.getElementById("password").value},

dataType:'json',

success:function (result) {

console.log(result);

if(result["code"] == 0) {

showVideoByAll();

setCookie("username",result["username"],1);

alert("login success");

// location.href = "./index.html";

} else {

alert("invalid password or userName")

}

},

error:function () {

alert("er

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是使用 JWT 实现登录功能的 Java 代码示例: ```java import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import javax.crypto.spec.SecretKeySpec; import java.security.Key; import java.util.Date; public class JwtUtil { // 设置JWT过期时间,这里设置为1小时 private static final long EXPIRATION_TIME = 3600000; // JWT密码 private static final String SECRET = "mySecretKey"; // Token前缀 private static final String TOKEN_PREFIX = "Bearer"; // 存放Token的Header Key private static final String HEADER_STRING = "Authorization"; // 生成JWT Token public static String generateToken(String username) { // 生成JWT的时间 long nowMillis = System.currentTimeMillis(); Date now = new Date(nowMillis); // 设置JWT过期时间 Date expirationDate = new Date(nowMillis + EXPIRATION_TIME); // 设置JWT的Header SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256; byte[] apiKeySecretBytes = SECRET.getBytes(); Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName()); // 设置JWT的Payload Claims claims = Jwts.claims().setSubject(username); // 生成JWT Token String token = Jwts.builder() .setClaims(claims) .setIssuedAt(now) .setExpiration(expirationDate) .signWith(signingKey, signatureAlgorithm) .compact(); return token; } // 验证JWT Token public static boolean validateToken(String token) { try { // 验证JWT Token是否合法 Jwts.parser().setSigningKey(SECRET.getBytes()).parseClaimsJws(token); return true; } catch (Exception e) { return false; } } // 从JWT Token中获取用户名 public static String getUsernameFromToken(String token) { Claims claims = Jwts.parser() .setSigningKey(SECRET.getBytes()) .parseClaimsJws(token) .getBody(); return claims.getSubject(); } } ``` 在登录接口调用 `generateToken` 方法生成 JWT Token,然后将生成的 Token 返回给客户端,客户端将 Token 保存在本地。在后续的请求中,客户端需要在请求的 Header 中携带 Token,服务端从 Header 中获取 Token,调用 `validateToken` 方法验证 Token 的合法性,然后从 Token 中获取用户名,进而完成登录认证。 ### 回答2: Java代码使用JWT实现登录功能的步骤如下: 1. 首先,需要导入相关的依赖包。可以使用Maven或Gradle构建工具来管理依赖项。需要导入的依赖包有:jjwt、javax.servlet-api等。 2. 创建一个JWTUtil类,该类用于生成和验证JWT。其中,生成JWT的方法如下: ```java import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import java.util.Date; public class JWTUtil { private static final String SECRET_KEY = "密钥"; private static final long EXPIRATION_TIME = 1800000; // 过期时间为30分钟 public static String generateToken(String username) { return Jwts.builder() .setSubject(username) .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) .signWith(SignatureAlgorithm.HS512, SECRET_KEY) .compact(); } } ``` 3. 创建一个LoginController类,用于处理登录请求。在该类中,可以使用JWTUtil的generateToken方法生成JWT,并将其返回给前端。 ```java import javax.servlet.http.HttpServletRequest; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController public class LoginController { @PostMapping("/login") public String login(@RequestBody User user, HttpServletRequest request) { // 根据用户名和密码验证用户信息 if (user.getUsername().equals("admin") && user.getPassword().equals("admin")) { String token = JWTUtil.generateToken(user.getUsername()); return token; } else { return "登录失败"; } } } ``` 在这个示例中,假设用户对象User中包含了用户名和密码字段。 4. 前端登录请求发送到后台时,会调用LoginController的login方法。如果用户名和密码验证成功,将生成JWT并返回给前端前端可以将该JWT存储起来,并在后续的请求中通过HTTP头或其他方式发送给服务端进行验证。 需要注意的是,JWT中包含了用户信息,因此在收到JWT后,服务端可以通过解析JWT获取用户信息,而无需再次查询数据库验证用户信息。 以上就是用Java代码使用JWT实现登录功能的简要说明。当然,实际应用中可能还需要完成其他的操作,比如JWT的验证等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值