jwt setSubject
时间: 2023-08-21 22:17:28 浏览: 41
在JWT中,setSubject方法用于设置JWT的主题(sub)字段。这个字段表示JWT所代表的主体或者是JWT的所有者。通常情况下,主题字段是一个字符串,用于标识JWT所关联的用户或实体。通过使用setSubject方法,我们可以将指定的主题值设置到JWT的有效载荷部分中,以便在JWT生成后可以进行传递和验证。
相关问题
jwt代码 java
JWT(JSON Web Token)是一种用于安全地传输信息的开放标准。它可以通过数字签名验证消息的可靠性和完整性,从而保证数据在传输过程中不会被篡改。在Java中,我们可以使用一些开源库来处理JWT,比如jjwt、nimbus-jose-jwt等。
以下是一个使用jjwt库创建和解析JWT的示例代码:
创建JWT:
```java
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class JwtUtil {
private static final String SECRET_KEY = "mySecretKey"; // 用于生成签名的密钥
public static String generateToken(String subject, long expirationMillis) {
Date now = new Date();
Date expiration = new Date(now.getTime() + expirationMillis);
return Jwts.builder()
.setSubject(subject)
.setIssuedAt(now)
.setExpiration(expiration)
.signWith(SignatureAlgorithm.HS256, SECRET_KEY)
.compact();
}
}
```
解析JWT:
```java
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
public class JwtUtil {
private static final String SECRET_KEY = "mySecretKey"; // 用于生成签名的密钥
public static String parseToken(String token) {
Claims claims = Jwts.parser()
.setSigningKey(SECRET_KEY)
.parseClaimsJws(token)
.getBody();
return claims.getSubject();
}
}
```
在上面的代码中,我们首先定义了一个SECRET_KEY作为生成签名的密钥。然后,我们使用Jwts.builder()方法创建一个JWT,设置了JWT的主题、发行时间和过期时间,并使用HS256算法生成签名。最后,我们使用Jwts.parser()方法来解析JWT,验证签名,并获取JWT中包含的主题信息。
springboot添加jwt
Spring Boot 是一个流行的Java Web开发框架,JWT(JSON Web Token)是一种基于JSON的开放标准(RFC 7519),用于在网络应用间传递声明。Spring Boot 可以与JWT结合使用,以增强Web应用程序的安全性。
要添加JWT到Spring Boot项目中,需要完成以下步骤:
1. 添加Maven依赖项
在 pom.xml 文件中添加如下依赖项:
```
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.2</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
```
2. 创建JWT类
创建一个JWT类,该类将负责创建和解析JWT。例如:
```
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class JwtUtil {
private static final String SECRET_KEY = "your_secret_key_here";
private static final long EXPIRATION_TIME = 864_000_000; // 10 days in milliseconds
public static String createToken(String username) {
return Jwts.builder()
.setSubject(username)
.setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
.signWith(SignatureAlgorithm.HS512, SECRET_KEY)
.compact();
}
public static String getUsernameFromToken(String token) {
Jws<Claims> claimsJws = Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token);
return claimsJws.getBody().getSubject();
}
public static boolean validateToken(String token) {
try {
Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token);
return true;
} catch (Exception e) {
return false;
}
}
}
```
3. 添加JWT过滤器
创建一个JWT过滤器,该过滤器将验证传入的HTTP请求是否具有有效的JWT,并将用户信息添加到Spring Security上下文中。例如:
```
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class JwtAuthenticationFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
String token = getTokenFromRequest(request);
if (token != null && JwtUtil.validateToken(token)) {
String username = JwtUtil.getUsernameFromToken(token);
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, null, null);
SecurityContextHolder.getContext().setAuthentication(authenticationToken);
}
filterChain.doFilter(request, response);
}
private String getTokenFromRequest(HttpServletRequest request) {
String bearerToken = request.getHeader("Authorization");
if (bearerToken != null && bearerToken.startsWith("Bearer ")) {
return bearerToken.substring(7);
}
return null;
}
}
```
4. 在Spring Security配置中添加JWT过滤器
在 Spring Security 配置类中添加上述 JWT 过滤器。例如:
```
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and()
.addFilterBefore(new JwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
}
}
```