令牌工具类(Jwt)和 Md5随机盐值加密

本文介绍了如何在Java中使用Jwt工具类生成和验证JWT令牌,以及使用MD5加密工具类生成随机盐值对密码进行加密。同时展示了JsonUtils类用于JSON操作的方法,如对象转JSON和JSON转对象。
摘要由CSDN通过智能技术生成

令牌工具类(Jwt)和 Md5随机盐值加密

public class JwtUtils {
    private static final long EXPIRE_DATE=30*60*1000;
    //token秘钥
    private static final String TOKEN_SECRET = "qianggezainaliwyywyasdaDQWCWQ%5ASAACACAssdsdsbalgda";

    /**
     * 生成token
     * @param username
     * @param userId
     * @return
     */
    public static String token (Integer userId,String username){

        String token = "";
        try {
            //过期时间
            Date date = new Date(System.currentTimeMillis()+EXPIRE_DATE);
            //秘钥及加密算法
            Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
            //设置头部信息
            Map<String,Object> header = new HashMap<>();
            header.put("typ","JWT");
            header.put("alg","HS256");
            //携带username,password信息,生成签名
            token = JWT.create()
                    .withHeader(header)
                    .withClaim("username",username)
                    .withClaim("userId",userId)
                    .withExpiresAt(date)
                    .sign(algorithm);
        }catch (Exception e){
            e.printStackTrace();
            return  null;
        }
        return token;
    }

    /**
     * 校验
     * @param token
     * @return
     */
    public static boolean verify(String token){
        /**
         * @desc   验证token,通过返回true
         * @params [token]需要校验的串
         **/
        try {
            Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
            JWTVerifier verifier = JWT.require(algorithm).build();
            DecodedJWT jwt = verifier.verify(token);
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return  false;
        }
    }

    public static User parse(String token){
        DecodedJWT decodedJWT = JWT.decode(token);

        Map<String, Claim> claims = decodedJWT.getClaims();
        String username = claims.get("username").asString();
        Integer userId = claims.get("userId").asInt();

        User admin = new User();
        admin.setId(userId);
        admin.setUsername(username);

        return admin;

    }



    public static void main(String[] args) {

        String token = token(10,"zs");
        System.out.println(token);
//
//        //eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpbWFnZSI6IuayoeaciSIsInBob25lIjoiMTEwIiwiZXhwIjoxNjI1MDE4MTA5LCJ1c2VybmFtZSI6ImFsZyJ9.jMj6tR9h9QHxPEVQ23Ph3J1zLi7Fe3xcArAywee5EH0
//        System.out.println(token);
//
//        //验签
//        boolean isLogin= verify("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpbWFnZSI6IuayoeaciSIsInBob25lIjoiMTEwIiwiZXhwIjoxNjI1MDE4MTA5LCJ1c2VybmFtZSI6ImFsZyJ9.jMj6tR9h9QHxPEVQ23Ph3J1zLi7Fe3xcArAywee5EH0");
//
//        System.out.println(isLogin);

    }

}

MD5加密工具类

public class Md5Utils {
	
	
	
	/**
	 * 生成盐
	 * @return
	 */
	public static String crateSalt() {
		return UUID.randomUUID().toString();
	}
	
	/**
	 * 加密操作
	 * @param password 明文
	 * @param salt  调料
	 * @return 加密后的密码 
	 */
	public static String md5Password(String password,String salt) {
		
		try {
		
		//1.获取md5加密算法
		MessageDigest digest = MessageDigest.getInstance("md5");
		
		//2.加密密码 
		byte[] md5 = digest.digest((password+salt).getBytes());
		
		//3.Base64进行编码
		byte[] encoder = Base64.getEncoder().encode(md5);
		
		return new String(encoder);
		
		}catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException("加密失败!");
		}
	}

	public static void main(String[] args) {
		String salt = crateSalt();
		System.out.println(salt);
		String pwd = md5Password("ls", salt);
		System.out.println(pwd);

	}
	
}

json工具类(jackson依赖)

public class JsonUtils {

    // 定义jackson对象
    private static final ObjectMapper MAPPER = new ObjectMapper();

    /**
     * 将对象转换成json字符串。
     * <p>Title: pojoToJson</p>
     * <p>Description: </p>
     * @param data
     * @return
     */
    public static String objectToJson(Object data) {
    	try {
			String string = MAPPER.writeValueAsString(data);
			return string;
		} catch (JsonProcessingException e) {
			e.printStackTrace();
		}
    	return null;
    }
    
    /**
     * 将json结果集转化为对象
     * 
     * @param jsonData json数据
     * @param clazz 对象中的object类型
     * @return
     */
    public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
        try {
            T t = MAPPER.readValue(jsonData, beanType);
            return t;
        } catch (Exception e) {
        	e.printStackTrace();
        }
        return null;
    }
    
    /**
     * 将json数据转换成pojo对象list
     * <p>Title: jsonToList</p>
     * <p>Description: </p>
     * @param jsonData
     * @param beanType
     * @return
     */
    public static <T> List<T> jsonToList(String jsonData, Class<T> beanType) {
    	JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
    	try {
    		List<T> list = MAPPER.readValue(jsonData, javaType);
    		return list;
		} catch (Exception e) {
			e.printStackTrace();
		}
    	
    	return null;
    }


    public static void main(String[] args) {
        Result result = new Result();
        result.setCode(200);
        result.setMsg("成功了...");


        //转成json
//        String str = "{\"code\":200,\"msg\":\"成功了...\"}";

//        String str = "{\"code\":200,\"msg\":\"成功了...\",\"count\":null,\"data\":null}";
        //工具类专门转换
        String str = JsonUtils.objectToJson(result);
        System.out.println(str);
        Result re = JsonUtils.jsonToPojo(str, Result.class);
        System.out.println(re.getMsg());
    }
}
  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于Spring Boot应用程序记住密码和使用JWT令牌进行身份验证的场景,你可以按照以下步骤进行操作: 1. 添依赖:在`pom.xml`文件中添Spring Security和JWT的依赖项。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> ``` 2. 创建Spring Security配置类:创建一个类来扩展`WebSecurityConfigurerAdapter`,并覆盖`configure`方法。 ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() .antMatchers("/api/auth/**") .permitAll() .anyRequest() .authenticated(); } @Override public void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService()) .passwordEncoder(passwordEncoder()); } @Bean @Override public UserDetailsService userDetailsService() { // 实现自定义的UserDetailsService接口来获取用户信息并进行身份验证 return new CustomUserDetailsService(); } @Bean public PasswordEncoder passwordEncoder() { // 使用BCryptPasswordEncoder来对密码进行加密和验证 return new BCryptPasswordEncoder(); } } ``` 3. 创建用户实体类:创建一个用户实体类,用于保存用户信息。 ```java @Entity @Table(name = "users") public class User implements UserDetails { // 实现UserDetails接口的方法 // 用户名、密码等其他属性 // getter和setter方法 } ``` 4. 创建自定义UserDetailsService:实现Spring Security的`UserDetailsService`接口,用于获取用户信息。 ```java @Service public class CustomUserDetailsService implements UserDetailsService { @Autowired private UserRepository userRepository; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user = userRepository.findByUsername(username); if (user == null) { throw new UsernameNotFoundException("User not found with username: " + username); } return user; } } ``` 5. 创建JWT工具类:创建一个JWT工具类,用于生成和解析JWT令牌。 ```java @Component public class JwtTokenProvider { private static final String SECRET_KEY = "yourSecretKey"; private static final long EXPIRATION_TIME = 86400000; // 24小时 public String generateToken(Authentication authentication) { User user = (User) authentication.getPrincipal(); Date now = new Date(); Date expiryDate = new Date(now.getTime() + EXPIRATION_TIME); return Jwts.builder() .setSubject(user.getUsername()) .setIssuedAt(new Date()) .setExpiration(expiryDate) .signWith(SignatureAlgorithm.HS512, SECRET_KEY) .compact(); } public boolean validateToken(String token) { try { Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token); return true; } catch (SignatureException ex) { System.out.println("Invalid JWT signature"); } catch (MalformedJwtException ex) { System.out.println("Invalid JWT token"); } catch (ExpiredJwtException ex) { System.out.println("Expired JWT token"); } catch (UnsupportedJwtException ex) { System.out.println("Unsupported JWT token"); } catch (IllegalArgumentException ex) {

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值