手把手教你用springboot打造标准系统(三)--Token登陆和跨域处理

本文介绍了如何使用SpringBoot构建后端,配合Vue实现Token登录验证及跨域处理。前后端分离有助于团队协作和系统并发处理。文章详细讲解了TokenGenerator的创建、OAuth2Filter过滤器的实现、用户登录处理、Vue项目初始化、axios配置以及前端路由与登录界面的设置。最后,讨论了SpringBoot的跨域配置解决前端请求的跨域问题。
摘要由CSDN通过智能技术生成

现在开发流行使用VUE做前端,通过前后端分离的方式来架构系统。那么为什么要前后端分离呢?
首先,前后端分离是团队合作的产物,团队任务分工后,前端工程师专注前端业务展现,后端工程师专注业务逻辑。
其次,前后端分离有利于系统大流量的并发处理。分离后,前端通常会采取CDN加速,以达到快速展现的目标,同时减轻了网络带宽和服务器的压力。

由于本人在VUE上的造诣一般,这里就不多讲VUE,只是用来做一些显示和验证后端。
需要学习VUE的给你个传送门https://www.runoob.com/vue2/vue-tutorial.html
认证阅读几遍应该就没有什么问题,毕竟javascript的语法和java还是比较相似的。

首先,创建一个生产Token的类TokenGenerator
 

package com.james.framework.modules.sys.oauth2;

import com.james.framework.common.exception.RRException;

import java.security.MessageDigest;
import java.util.UUID;


public class TokenGenerator {

    public static String generateValue() {
        return generateValue(UUID.randomUUID().toString());
    }

    private static final char[] hexCode = "0123456789abcdef".toCharArray();

    public static String toHexString(byte[] data) {
        if(data == null) {
            return null;
        }
        StringBuilder r = new StringBuilder(data.length*2);
        for ( byte b : data) {
            r.append(hexCode[(b >> 4) & 0xF]);
            r.append(hexCode[(b & 0xF)]);
        }
        return r.toString();
    }

    /**
     * token生产方法,采用MD5加密
     * @param param
     * @return
     */
    public static String generateValue(String param) {
        try {
            MessageDigest algorithm = MessageDigest.getInstance("MD5");
            algorithm.reset();
            algorithm.update(param.getBytes());
            byte[] messageDigest = algorithm.digest();
            return toHexString(messageDigest);
        } catch (Exception e) {
            throw new RRException("生成Token失败", e);
        }
    }
}

此处主要方法generateValue,通过对UUID进行MD5加密后,再做一次Hex处理。功能不复杂具体看代码。

然后,创建一个过滤器,拦截所有请求,检查header中是否携带token,没有token返回401,具体看OAuth2Filter代码。

package com.james.framework.modules.sys.oauth2;

import com.google.gson.Gson;
import com.james.framework.common.utils.Rest;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.web.filter.authc.AuthenticatingFilter;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


public class OAuth2Filter extends AuthenticatingFilter {

    @Override
    protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) throws Exception {
        //获取请求token
        String token = getRequestToken((HttpServletRequest) request);

        if(StringUtils.isBlank(token)){
            return null;
        }

        return new OAuth2Token(token);
    }

    @Override
    protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
        return false;
    }

    @Override
    protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
        //获取请求token,如果token不存在,直接返回401
        String token = getRequestToken((HttpServletRequest) request);
        if(StringUtils.isBlank(token)){
            HttpServletResponse httpResponse = (HttpServletResponse) response;
            String json = new Gson().toJson(Rest.error(401, "invalid token"));
            httpResponse.getWriter().print(json);

            return false;
        }

        return ex
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值