基于rsa(非对称加密算法)登录

3 篇文章 0 订阅
2 篇文章 0 订阅

html代码

function login() {
var encrypt=new JSEncrypt();
encrypt.setPublicKey(publicKey);
var name=encrypt.encrypt(KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲name").val()); …("#pwd").val());
KaTeX parse error: Expected '}', got 'EOF' at end of input: …ult.code==200){.cookie(“token”,result.data);
location.href=“index.html”;
}else{console.log(result.msg);}
}
})
}

service层

@Override
public ServerResponse login(String name, String pwd) {
name = RSAUtil.decrypt(name);
pwd = RSAUtil.decrypt(pwd);
if (!StringUtils.isNotEmpty(name) || !StringUtils.isNotEmpty(pwd)) {
return ServerResponse.error(ResponseEnum.LOGIN_MEMBER_NULL_IS_EMPTY);
}
QueryWrapper m = new QueryWrapper<>();

    m.eq("name", name);
    Member member = memberMapper.selectOne(m);
    if (member == null) {
        return ServerResponse.error(ResponseEnum.LOGIN_MEMBER_NAME_ERROR);
    }
    if (!pwd.equals(member.getPwd())) {
        return ServerResponse.error(ResponseEnum.LOGIN_MEMBER_PWD_ERROR);
    }

    MemberVo vo = new MemberVo();
    Long id = member.getId();
    vo.setId(id);
    vo.setName(member.getName());
    vo.setRealName(member.getRealName());
    String uuid = UUID.randomUUID().toString();
    vo.setUuid(uuid);

    String s1 = JSONObject.toJSONString(vo);

    String s2 = null;
    try {
        s2 = Base64.getEncoder().encodeToString(s1.getBytes("utf-8"));

        String sign = MD5Util.sign(s2, SystemConstant.APPSECRET);
        String baseSign = Base64.getEncoder().encodeToString(sign.getBytes());
        String result=s2+"."+baseSign;
        RedisUtil.setEx(KeyUtil.buildMemberKey(id,uuid),"1", KeyUtil.MEMBER_EXPIRE);
        return ServerResponse.success(result);
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
        throw new RuntimeException(e);
    }


}

拦截器代码:

public class LoginInterceptor extends HandlerInterceptorAdapter {

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
   // String origin = request.getHeader("Origin");
    response.addHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "*");
    response.addHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "x-auth,content-type,nonce,time,sign");
    /*获取方法*/
    String method1 = request.getMethod();
    if ("options".equalsIgnoreCase(method1)) { return false; }
    HandlerMethod handlerMethod = (HandlerMethod) handler;
    Method method = handlerMethod.getMethod();
    if (!method.isAnnotationPresent(Check.class)) { return true; }
    String header = request.getHeader("x-auth");
    if (StringUtils.isEmpty(header)) { throw new GlobalException(ResponseEnum.HANDLER_IS_MISS); }

    String[] split = header.split("\\.");
    if (split.length != 2) { throw new GlobalException(ResponseEnum.HANDLER_CONTENT_IS_MISS); }
    String memberJsonBase64 = split[0];
    String signBase64 = split[1];
    String sign = MD5Util.sign(memberJsonBase64, SystemConstant.APPSECRET);
    String s = Base64.getEncoder().encodeToString(sign.getBytes());
    if (!signBase64.equals(s)) { throw new GlobalException(ResponseEnum.DATA_IS_CHANGE); }

    //获取会员信息
    String s1 = new String(Base64.getDecoder().decode(memberJsonBase64), "utf-8");
    MemberVo vo = JSONObject.parseObject(s1, MemberVo.class);
    String uuid = vo.getUuid();
    Long id = vo.getId();
    //验证是否过期
    boolean exist = RedisUtil.exist(KeyUtil.buildMemberKey(id, uuid));
    if (!exist) { throw new GlobalException(ResponseEnum.LOGIN_IS_TIMEOUT); }
    RedisUtil.expire(KeyUtil.buildMemberKey(id, uuid), KeyUtil.MEMBER_EXPIRE);
    request.setAttribute(SystemConstant.CURRENT_MEMBER, vo);
    return true;
}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值