web第三第四次作业——依赖Jwt实现登录校验

本文介绍了如何在Java中使用JWT(JSONWebTokens)进行身份验证,包括创建JWT、解析并提取payload中的用户信息以及在LoginController中实现用户登录和JWT生成的过程。
摘要由CSDN通过智能技术生成
public class Jwtweb {
    private static SecretKey secretKey = Keys.hmacShaKeyFor(Decoders.BASE64.decode("jmshiossssssssssssssssss"));
    public static String createttoken(Map<String, Object> claims) {
        return Jwts.builder()
                .setSubject("test")
                .signWith(secretKey, Jwts.SIG.HS256)
                .claims(claims)
                .expiration(new Date(System.currentTimeMillis()+365 * 24 * 60 * 60 * 1000))
                .compact();
    }

    /**
     * 先解析jwt
     * 再从Token中获取负载中的Claims:getPayload();
     * @param token token
     * @return 负载
     */
    private static Claims getPayload(String token)
    {
        return Jwts.parser()
                .verifyWith(secretKey)
                .build()
                .parseSignedClaims(token)
                .getPayload();
    }

    /**
     * 从Token中获取用户名
     * @param token token
     * @return String
     */
    public static String getUsername(String token){
        try
        {
            String userName = (String) getPayload(token).get("userName");
            return userName;
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 从Token中获取用户ID
     * @param token token
     * @return Long
     */
    public static Long getUserId(String token){
        try
        {
            String userId = (String) getPayload(token).get("userId");
            return Long.valueOf(userId);
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
}
public interface UserService {
//    用户登录接口
    public User login(User user);
}
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private Usermapper usermapper;
    @Override
    public User login(User user) {
        return usermapper.getUserbynameandpassword(user);
    }
}
@Mapper
public interface Usermapper {
    //查询所有
    @Select("select * from user")
    public List<User> list();
//    根据用户名和秘密查询用户
    @Select("select * from user where name=#{name} and password=#{password}")
    User getUserbynameandpassword(User user);
}
@Slf4j
@RestController
public class LoginController {
    @Autowired
    private UserService userService;

    @PostMapping("/login")
    public Result login(@RequestBody User user) {
        User user1 = userService.login(user);
        if (user1 != null) {
            Map<String, Object> clamis = new HashMap<>();
            clamis.put("id", user1.getId());
            clamis.put("username", user1.getName());
            clamis.put("password", user1.getPassword());
            String jwt = Jwtweb.createttoken(clamis);
            return Result.success(jwt);
        } else {
            return Result.fail("error");
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值