license项目简单使用以及根据ip获取mac地址(也可获取主机ip,自行测试)

springboot实现Web系统License授权认证

package com.saite.energy.ids.controller;

import com.saite.energy.ids.enums.IdsHttpStatusEnum;
import com.saite.energy.ids.enums.ResponseResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;

/**
 * @Description:
 * @author: ljh
 * @createDate: 2021-11-04 20:48
 * @version: 1.0
 */
@RestController
@RequestMapping("/mac")
public class MacAddressController {

    @PostMapping("/getMacAddress")
    public ResponseResult<String> getMacAddress(String ip) throws SocketException {
        InetAddress inetAddress = null;
        // 遍历所有的网络接口
        for (Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces(); networkInterfaces.hasMoreElements(); ) {
            NetworkInterface ni = (NetworkInterface) networkInterfaces.nextElement();
            // 在所有的接口下再遍历IP
            for (Enumeration addresses = ni.getInetAddresses(); addresses.hasMoreElements(); ) {
                InetAddress address = (InetAddress) addresses.nextElement();
                //排除LoopbackAddress、SiteLocalAddress、LinkLocalAddress、MulticastAddress类型的IP地址
                if (!address.isLoopbackAddress() /*&& !inetAddr.isSiteLocalAddress()*/
                        && !address.isLinkLocalAddress() && !address.isMulticastAddress() && ip.equals(address.getHostAddress())) {
                    inetAddress = address;
                }
            }
        }
        if (inetAddress != null){
            try {
                byte[] mac = NetworkInterface.getByInetAddress(inetAddress).getHardwareAddress();
                StringBuilder stringBuilder = new StringBuilder();
                for (int i = 0; i < mac.length; i++) {
                    if (i != 0) {
                        stringBuilder.append("-");
                    }
                    /** 将十六进制byte转化为字符串 */
                    String temp = Integer.toHexString(mac[i] & 0xff);
                    if (temp.length() == 1) {
                        stringBuilder.append("0").append(temp);
                    } else {
                        stringBuilder.append(temp);
                    }
                }
                return ResponseResult.ok().data(stringBuilder.toString().toUpperCase());
            } catch (SocketException e) {
                e.printStackTrace();
            }
            return null;
        }else {
            return ResponseResult.error(IdsHttpStatusEnum.LICENSE_IP_ERROR);

        }

    }

}

package com.saite.energy.ids.enums;

import lombok.Getter;

import java.util.Arrays;
import java.util.Optional;

/**
 * 20000是请求成功 定义业务处理的错误码 方便给前端做国际化处理
 * <p>
 * 错误码和错误信息的定义 1.错误码的定义规则为5位数字 2.前方两位表示业务场景,最后3位表示错误码。例如:100001。10:通用 001:系统未知异常
 *
 * 3.维护错误码后需要维护错误码描述,将他们定义位枚举形式 错误码列表: 10:通用 001:参数格式校验
 * 接下来的业务的错误码,就每一个业务给100个错误码的提示信息,如果不够,可以再在后面拍一个,比如授权模块 110 不够 可以使用120[00 - 99]
 *
 *
 * </p>
 *
 * @author lijinghui
 * @version v1.0.0
 * @since 2021-02-07 15:27:08
 * @see IdsHttpStatusEnum
 *
 */
@Getter
public enum IdsHttpStatusEnum {

	OK(20000, "成功"),

	

	// 用户模块 111[00-99]
	NO_USER_ID_ERROR(11100, "无用户ID"), NO_ROLE_ID_ERROR(11101, "缺少角色ID"), ENTERPRISE_DEPT_DELETE(11102,"企业删除失败,请先删除该企业下的所有部门和电站"),
	AUTH_TOO_HIGH(11103,"该角色含有过高权限"),ROLE_DETAIL_FAUL(11104,"该角色详情不可查看"),
	ROLE_TOO_HIGH(11105,"该用户含有过高角色"),USER_DETAIL_FAUL(11106,"该用户详情不可查看"),
	NO_DEPT(11107,"部门不能为空"),LOGIN_NAME_NULL(11108,"用户名不能为空"),LOGIN_NAME_EXIST(11109,"用户名已存在"),
	SMS_SEND_TOO_OFTEN(11110,"短信发送太频繁"), VER_CODE_ERROR(11111, "验证码错误"),
	EMAIL_SEND_TO_OFTEN(11112, "邮件发送太频繁"), REGISTER_TYPE_ERROR(11113, "注册类型错误"), FORGET_TYPE_ERROR(11114, "找回密码类型错误"),
	USER_UNREGISTER(11115, "账号未注册"),ROLE_CAN_NOT_UPDATE(11116,"该角色为内置角色,不可修改"),REGISTER_ROLE_ERROR(11117, "注册角色有误"),
	INSTALLER_OR_AGENT_ENTERPRISE_NOT_NULL(11118,"安装商或代理商所属企业不能为空"),USER_USERNAME_ERROR(11119,"用户姓名不能为空"),
	USER_GENDER_ERROR(11120,"用户性别有误"),USER_ORIGINAL_PASSWORD_ERROR(11121,"旧密码有误"),USER_NEW_PASSWORD_ERROR(11122,"新密码有误"),
	LICENSE_FILETYPE_NOTMATCH(11123,"license文件类型不匹配"),LICENSE_IMPORT_FAIL(11124,"license导入失败"),LICENSE_IP_ERROR(11125,"license导入失败,没有对应ip"),
	;

	private int code;

	private String msg;

	IdsHttpStatusEnum(int code, String msg) {
		this.code = code;
		this.msg = msg;
	}

	/**
	 * 通过编号获取对应的枚举类型
	 * @param code
	 * @return
	 */
	public static IdsHttpStatusEnum getByCode(int code) {
		Optional<IdsHttpStatusEnum> first = Arrays.stream(IdsHttpStatusEnum.values()).filter(item -> item.code == code).findFirst();
		if(first.isPresent()) {
			return first.get();
		}
		return null;
	}

}

package com.saite.energy.ids.enums;

import lombok.Data;

/**
 * @Description: TODO
 * @author: lijinghui
 * @date: 2021年02月07日 13:49
 */
@Data
public class ResponseResult<T> {

	/**
	 * 用户码: 20000 ok
	 */
	private int code;

	private String msg;

	private T data;

	public static ResponseResult error(IdsHttpStatusEnum bizCodeEnum) {
		ResponseResult r = new ResponseResult<>();
		r.setCode(bizCodeEnum.getCode());
		r.setMsg(bizCodeEnum.getMsg());
		return r;
	}

	public static ResponseResult ok() {
		ResponseResult<?> r = new ResponseResult<>();
		r.setCode(IdsHttpStatusEnum.OK.getCode());
		return r;
	}

	public ResponseResult data(T data) {
		this.setData(data);
		return this;
	}

	/**
	 * 错误消息是不确定的方式
	 * @param dynamicError
	 * @return
	 */
	public static ResponseResult error(String dynamicError) {
		ResponseResult r = new ResponseResult<>();
		r.setCode(IdsHttpStatusEnum.DYNAMIC_ERROR.getCode());
		r.setMsg(dynamicError);
		return r;
	}

	/**
	 * 是否请求成功
	 * @return
	 */
	public boolean isSuccess() {
		return code == IdsHttpStatusEnum.OK.getCode();
	}

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_42287451

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值