Procházet zdrojové kódy

品牌落地活动接口

shenhao před 5 roky
rodič
revize
5b5927acaa

+ 7 - 7
src/main/java/com/ssj/framework/basic/utils/DateHelper.java

@@ -125,13 +125,13 @@ public class DateHelper {
      * @param
      * @return
      */
-    public static String getTimeDes(Date date) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(date);
-
-        long time = date.getTime() / 1000;
-        long now = System.currentTimeMillis() / 1000;
-        long ago = now - time;
+    public static String getTimeDes(long ago) {
+//        Calendar calendar = Calendar.getInstance();
+//        calendar.setTime(date);
+//
+//        long time = date.getTime() / 1000;
+        //long now = System.currentTimeMillis() / 1000;
+//        long ago = now - time;
         if ( ONE_HOUR >=ago ) {
             return ago / ONE_MINUTE + "分钟前";
         } else if (ONE_DAY >=ago) {

+ 16 - 0
src/main/java/com/ssj/service/conch/parents/service/ParentService.java

@@ -1,5 +1,6 @@
 package com.ssj.service.conch.parents.service;
 
+import com.ssj.bean.weixin.user.domain.User;
 import com.ssj.framework.core.util.ResponseEntity;
 
 
@@ -27,5 +28,20 @@ public interface ParentService {
 	ResponseEntity confirmSms(String phoneNumber,String code);
 
 
+	ResponseEntity sendSmsV2(String phoneNumber);
 
+	/**
+	 * 确认验证码
+	 * @param trim
+	 * @param msgCode
+	 * @return
+	 */
+	ResponseEntity confirmSmsV2(String trim, String msgCode);
+
+	/**
+	 * 检查是否有这个电话号码的用户,如果没有则创建返回用户
+	 * @param phoneNum
+	 * @return
+	 */
+	User checkPhoneUser(String phoneNum);
 }

+ 73 - 1
src/main/java/com/ssj/service/conch/parents/service/impl/ParentServiceImpl.java

@@ -1,10 +1,14 @@
 package com.ssj.service.conch.parents.service.impl;
 
+import com.ssj.bean.weixin.user.domain.User;
 import com.ssj.framework.core.security.manager.TokenManager;
 import com.ssj.framework.core.util.AliyunSmsUtil;
+import com.ssj.framework.core.util.PasswordUtil;
 import com.ssj.framework.core.util.ResponseEntity;
 import com.ssj.framework.core.util.SystemResourceLocator;
+import com.ssj.framework.idworker.IdWorker;
 import com.ssj.service.conch.parents.service.ParentService;
+import com.ssj.service.weixin.user.service.UserService;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -13,6 +17,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Date;
+
 @Service
 @Transactional
 public class ParentServiceImpl implements ParentService {
@@ -22,12 +28,14 @@ public class ParentServiceImpl implements ParentService {
 	@Autowired
 	private TokenManager tokenManager;
 
+	@Autowired
+	private UserService userService;
+
 
 	@Override
 	public ResponseEntity sendSms(String phoneNumber,int type) throws Exception{
 		ResponseEntity responseEntity = new ResponseEntity();
 		//判断手机号是否已经注册逻辑
-
 		//获取6位随机验证码
 		String code = AliyunSmsUtil.getRandNum();
 		//所有验证码使用通用验证码:验证码${code},若非本人操作,请勿泄露。
@@ -81,4 +89,68 @@ public class ParentServiceImpl implements ParentService {
 		return responseEntity;
 	}
 
+	@Override
+	public ResponseEntity sendSmsV2(String phoneNumber) {
+		ResponseEntity responseEntity = new ResponseEntity();
+		try {
+			//获取6位随机验证码
+			String code = AliyunSmsUtil.getRandNum();
+			//所有验证码使用通用验证码:验证码${code},若非本人操作,请勿泄露。
+			AliyunSmsUtil.sendSms(phoneNumber, code,"SMS_175541171");
+
+			//发送成功后 60秒内不重新发送
+			tokenManager.set("repeatCode_".concat(phoneNumber), code, 60);
+			//五分钟后失效
+			tokenManager.set("cacheCode_".concat(phoneNumber), code, 300);
+		}catch (Exception e){
+			responseEntity.failure("验证码发送失败,请稍后重新获取");
+		}
+
+		return responseEntity.success("验证码发送成功");
+	}
+
+	@Override
+	public ResponseEntity confirmSmsV2(String phoneNumber, String code) {
+		ResponseEntity responseEntity = new ResponseEntity();
+		//判断是否是测试环境,如果是测试环境则跳过验证码校验
+		String sysEnv = (String) SystemResourceLocator.getValue("SYS_ENV");
+		String correctCode;
+		if("2".equals(sysEnv)) {
+			correctCode = code;
+		}else {
+			correctCode = tokenManager.getString("cacheCode_".concat(phoneNumber));
+		}
+		if (StringUtils.isBlank(correctCode)) {
+			responseEntity.failure("该验证码已经失效,请重新获取");
+		} else {
+			if (correctCode.equals(code)) {
+				responseEntity.success("校验成功");
+				//移除缓存
+				tokenManager.delString("cacheCode_".concat(phoneNumber));
+			} else {
+				responseEntity.failure("验证码不正确,请重新输入");
+			}
+		}
+		return responseEntity;
+	}
+
+	@Override
+	public User checkPhoneUser(String phoneNum) {
+
+		//无主家长,生成主家长
+		User user=userService.findByMobile(phoneNum);
+		if(user==null){
+			user=new User();
+			user.setId(IdWorker.generateId());
+			user.setUserName(phoneNum);
+			user.setMobile(phoneNum);
+			user.setCreateTime(new Date());
+			user.setPassword("123456");
+			user.setPwdSalt(PasswordUtil.generateSalt());
+			user.setPassword(PasswordUtil.initPassword(user.getPassword(), user.getPwdSalt()));
+			user=userService.save(user);
+		}
+		return user;
+	}
+
 }

+ 165 - 0
src/main/java/com/ssj/weixin/api/activity/BrandActivityController.java

@@ -0,0 +1,165 @@
+package com.ssj.weixin.api.activity;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.ssj.bean.weixin.user.domain.User;
+import com.ssj.framework.core.common.controller.BaseController;
+import com.ssj.framework.core.security.annotation.IgnoreSecurity;
+import com.ssj.framework.core.security.manager.TokenManager;
+import com.ssj.framework.core.util.ResponseConstant;
+import com.ssj.framework.core.util.ResponseEntity;
+import com.ssj.service.conch.parents.service.ParentService;
+import com.ssj.service.weixin.user.service.UserService;
+import com.ssj.weixin.api.activity.service.ISignUpService;
+import com.ssj.weixin.api.activity.vo.ActivityLogin;
+import com.ssj.weixin.api.activity.vo.SignUpBase;
+import com.ssj.weixin.api.activity.vo.SignUpVO;
+import io.swagger.annotations.Api;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ConcurrentModificationException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author sh
+ * @className BrandActivityController
+ * @description 品牌活动api
+ * @date 2021/4/7
+ */
+@Api(value = "品牌落地活动相关接口", tags = "品牌落地活动相关接口")
+@RestController
+@RequestMapping("/api/activity")
+public class BrandActivityController extends BaseController {
+
+    @Autowired
+    private TokenManager tokenManager;
+
+    @Autowired
+    private ParentService parentService;
+
+    @Autowired
+    private UserService userService;
+
+    @Autowired
+    private ISignUpService signUpService;
+
+    @IgnoreSecurity
+    @RequestMapping(value="/activityLogin",method = RequestMethod.POST)
+    public ResponseEntity activityLogin(ActivityLogin req){
+        ResponseEntity responseEntity = new ResponseEntity();
+        Map<String,Object> data = new HashMap<>();
+        if(StringUtils.isBlank(req.getPhoneNum())){
+            return responseEntity.failure(ResponseConstant.CODE_000,"请输入电话号码");
+        }
+        if(StringUtils.isBlank(req.getMsgCode())){
+            return responseEntity.failure(ResponseConstant.CODE_000,"请输入验证码");
+        }
+        responseEntity = parentService.confirmSmsV2(req.getPhoneNum().trim(),req.getMsgCode());
+        if(responseEntity.getCode().equals(ResponseConstant.CODE_999)){
+            //查询此手机用户是否存在,如果不存在则新增一个手机用户,默认密码123456
+            User user = parentService.checkPhoneUser(req.getPhoneNum());
+            //创建token
+            data.put("accessToken",tokenManager.createToken("",user.getId(),"activity"));
+            responseEntity.success(data,"登录成功!");
+        }
+        return   responseEntity;
+    }
+
+    @IgnoreSecurity
+    @RequestMapping(value="/sendCode",method = RequestMethod.POST)
+    public ResponseEntity sendCode(ActivityLogin req){
+        ResponseEntity responseEntity = new ResponseEntity();
+        if(StringUtils.isBlank(req.getPhoneNum())){
+            return responseEntity.failure(ResponseConstant.CODE_000,"请输入电话号码");
+        }
+        Map<String,Object> data = new HashMap<>();
+
+        //查看是否是已经报名成功
+        String phoneKey = "activitySuccess202101_"+req.getPhoneNum().trim();
+        if(tokenManager.exists(phoneKey)){
+            data.put("type",2);
+            data.put("qrCodeUrl",tokenManager.getString("activityQrCode_".concat(tokenManager.getString(phoneKey))));
+            return responseEntity.success(data,"成功");
+        }
+        try {
+            String codeKey = "repeatCode_".concat(req.getPhoneNum());
+            if(tokenManager.exists(codeKey)){
+                return responseEntity.failure("请于上次发送成功后60秒后再重新尝试!");
+            }
+            responseEntity = parentService.sendSmsV2(req.getPhoneNum().trim());
+            data.put("type",1);
+            responseEntity.success(data,"验证码发送成功");
+        }catch (Exception e){
+            responseEntity.failure(ResponseConstant.CODE_000,"发送短信验证码失败,请稍后重试");
+        }
+
+        return  responseEntity;
+    }
+
+    @RequestMapping(value="/submitSignUp",method = RequestMethod.POST)
+    @Modifying
+    public ResponseEntity submitSignUp(@RequestParam(name = "accessToken") String accessToken,SignUpBase req){
+        ResponseEntity responseEntity = new ResponseEntity();
+        String param = request.getParameter("req");
+        req = JSON.parseObject(param,SignUpBase.class);
+        //查看是否是已经报名成功
+        Map<String,Object> data = new HashMap<>();
+        User user = userService.getById(tokenManager.getUserId(accessToken));
+        String phoneKey = "activitySuccess202101_"+user.getMobile();
+        if(tokenManager.exists(phoneKey)){
+            data.put("qrCodeUrl",tokenManager.getString("activityQrCode_".concat(tokenManager.getString(phoneKey))));
+            return responseEntity.success(data,"成功");
+        }
+        //检查剩余名额
+        int configNum = tokenManager.get("activity_num_limit",int.class);
+        int nowNum = tokenManager.get("activity_num_now",int.class);
+        if(nowNum>=configNum){
+            return responseEntity.failure("您好,名额已满!");
+        }
+        //添加数据库
+        signUpService.addData(req,user);
+        data.put("qrCodeUrl",tokenManager.getString("activityQrCode_"+req.getType()));
+        responseEntity.success(data,"报名成功");
+        return   responseEntity;
+    }
+
+    @IgnoreSecurity
+    @RequestMapping(value="/signUpList",method = RequestMethod.POST)
+    public ResponseEntity signUpList(){
+        ResponseEntity responseEntity = new ResponseEntity();
+        Map<String,Object> data = new HashMap<>();
+        List<Map<String,Object>> list = signUpService.signUpList();
+        data.put("list",list);
+        responseEntity.success(data,"获取成功!");
+        return   responseEntity;
+    }
+
+    @IgnoreSecurity
+    @RequestMapping(value="/initQrCode",method = RequestMethod.POST)
+    public ResponseEntity initQrCode(){
+        ResponseEntity responseEntity = new ResponseEntity();
+        Map<String, String> map = new HashMap<>();
+        map.put("1","/activity/kol.png");
+        map.put("2","/activity/电梯框架广告.png");
+        map.put("3","/activity/公交车站台广告.png");
+        map.put("4","/activity/公众号文章.png");
+        map.put("5","/activity/广州线下地推.png");
+        map.put("6","/activity/门禁广告.png");
+        map.put("7","/activity/朋友圈广告.png");
+        map.put("8","/activity/社群广告.png");
+        map.put("9","/activity/书店.png");
+        map.put("10","/activity/无锡线下地推.png");
+        for (Map.Entry<String, String> entry : map.entrySet()) {
+            tokenManager.setString("activityQrCode_".concat(entry.getKey()), entry.getValue());
+        }
+        responseEntity.success("初始化成功!");
+        return   responseEntity;
+    }
+}

+ 15 - 0
src/main/java/com/ssj/weixin/api/activity/dao/ISignUpDao.java

@@ -0,0 +1,15 @@
+package com.ssj.weixin.api.activity.dao;
+
+import com.ssj.weixin.api.activity.entity.SignUpEntity;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author sh
+ * @className ISignUpDao
+ * @description TODO
+ * @date 2021/4/7
+ */
+@Repository
+public interface ISignUpDao extends JpaRepository<SignUpEntity,String> {
+}

+ 15 - 0
src/main/java/com/ssj/weixin/api/activity/dao/ISignUpQueryDao.java

@@ -0,0 +1,15 @@
+package com.ssj.weixin.api.activity.dao;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author sh
+ * @className ISignUpQueryDao
+ * @description queryDao
+ * @date 2021/4/7
+ */
+public interface ISignUpQueryDao {
+
+    List<Map<String, Object>> signUpList();
+}

+ 52 - 0
src/main/java/com/ssj/weixin/api/activity/dao/impl/SignUpQueryDaoImpl.java

@@ -0,0 +1,52 @@
+package com.ssj.weixin.api.activity.dao.impl;
+
+import com.ssj.framework.core.persistence.PagingHibernateJdbcDao;
+import com.ssj.weixin.api.activity.dao.ISignUpQueryDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author sh
+ * @className SignUpQueryDaoImpl
+ * @description
+ * @date 2021/4/7
+ */
+@Repository
+public class SignUpQueryDaoImpl implements ISignUpQueryDao {
+    @Autowired
+    private PagingHibernateJdbcDao dao;
+
+    @Override
+    public List<Map<String, Object>> signUpList() {
+        StringBuffer sql = new StringBuffer();
+        List<Object> params = new ArrayList<>();
+        sql.append("select t.phone_num,t.s_second from (");
+        sql.append(" (select phone_num,TIMESTAMPDIFF(SECOND,create_time,NOW()) as s_second from tb_activity_sign order by create_time limit 20)");
+        sql.append(" union all ");
+        sql.append(" select '159****2356',120  ");
+        sql.append(" union all ");
+        sql.append(" select '138****1356',1200  ");
+        sql.append(" union all ");
+        sql.append(" select '181****7300',1800  ");
+        sql.append(" union all ");
+        sql.append(" select '180****3654',300  ");
+        sql.append(" union all ");
+        sql.append(" select '158****3687',60  ");
+        sql.append(" union all ");
+        sql.append(" select '137****2195',600  ");
+        sql.append(" union all ");
+        sql.append(" select '139****3521',180  ");
+        sql.append(" union all ");
+        sql.append(" select '190****8527',240  ");
+        sql.append(" union all ");
+        sql.append(" select '139****3698',360  ");
+        sql.append(" union all ");
+        sql.append(" select '181****4587',3600  ");
+        sql.append(") t order by t.s_second asc ");
+        return dao.findMap(sql.toString(),params.toArray());
+    }
+}

+ 84 - 0
src/main/java/com/ssj/weixin/api/activity/entity/SignUpEntity.java

@@ -0,0 +1,84 @@
+package com.ssj.weixin.api.activity.entity;
+
+import com.ssj.bean.common.framework.core.domain.BaseEntity;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import java.util.Date;
+
+/**
+ * @author sh
+ * @className SignUpEntity
+ * @description 参加活动表
+ * @date 2021/4/7
+ */
+@Table(name="tb_activity_sign")
+@Entity
+public class SignUpEntity extends BaseEntity {
+
+    /**
+     * 电话号码
+     */
+    private String phoneNum;
+
+    /**
+     * 渠道
+     */
+    private int type;
+
+    /**
+     * 科目,练习册json
+     */
+    private String submitJson;
+
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 用户id
+     */
+    private String userId;
+
+    public String getPhoneNum() {
+        return phoneNum;
+    }
+
+    public void setPhoneNum(String phoneNum) {
+        this.phoneNum = phoneNum;
+    }
+
+    public int getType() {
+        return type;
+    }
+
+    public void setType(int type) {
+        this.type = type;
+    }
+
+    public String getSubmitJson() {
+        return submitJson;
+    }
+
+    public void setSubmitJson(String submitJson) {
+        this.submitJson = submitJson;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+}

+ 25 - 0
src/main/java/com/ssj/weixin/api/activity/service/ISignUpService.java

@@ -0,0 +1,25 @@
+package com.ssj.weixin.api.activity.service;
+
+import com.ssj.bean.weixin.user.domain.User;
+import com.ssj.framework.core.common.service.BaseService;
+import com.ssj.weixin.api.activity.entity.SignUpEntity;
+import com.ssj.weixin.api.activity.vo.SignUpBase;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author sh
+ * @className ISignUpService
+ * @description interface
+ * @date 2021/4/7
+ */
+public interface ISignUpService extends BaseService<SignUpEntity,String> {
+    void addData(SignUpBase req, User user);
+
+    /**
+     * 获取最新报名动态
+     * @return
+     */
+    List<Map<String, Object>> signUpList();
+}

+ 71 - 0
src/main/java/com/ssj/weixin/api/activity/service/impl/SignUpServiceImpl.java

@@ -0,0 +1,71 @@
+package com.ssj.weixin.api.activity.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ssj.bean.weixin.user.domain.User;
+import com.ssj.framework.basic.utils.DateHelper;
+import com.ssj.framework.core.common.service.BaseServiceImpl;
+import com.ssj.framework.core.security.manager.TokenManager;
+import com.ssj.weixin.api.activity.dao.ISignUpDao;
+import com.ssj.weixin.api.activity.dao.ISignUpQueryDao;
+import com.ssj.weixin.api.activity.entity.SignUpEntity;
+import com.ssj.weixin.api.activity.service.ISignUpService;
+import com.ssj.weixin.api.activity.vo.SignUpBase;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.persistence.Transient;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author sh
+ * @className SignUpServiceImpl
+ * @description 业务
+ * @date 2021/4/7
+ */
+@Service
+@Transactional
+public class SignUpServiceImpl extends BaseServiceImpl<SignUpEntity,String> implements ISignUpService  {
+
+
+    @Autowired
+    private TokenManager tokenManager;
+
+    @Autowired
+    private ISignUpDao dao;
+
+    @Autowired
+    private ISignUpQueryDao queryDao;
+
+    @Override
+    public PagingAndSortingRepository<SignUpEntity, String> getDao() {
+        return dao;
+    }
+
+    @Override
+    public void addData(SignUpBase req, User user) {
+        //添加数据
+        SignUpEntity entity = new SignUpEntity();
+        entity.setSubmitJson(JSONObject.toJSONString(req));
+        entity.setPhoneNum(user.getMobile());
+        entity.setCreateTime(new Date());
+        entity.setType(req.getType());
+        entity.setUserId(user.getId());
+        this.save(entity);
+
+        //设置此电话参加活动成功缓存
+        tokenManager.set("activitySuccess202101_".concat(user.getMobile()),req.getType());
+        //人数加1
+        tokenManager.incrKey("activity_num_now");
+    }
+
+    @Override
+    public List<Map<String, Object>> signUpList() {
+        List<Map<String, Object>> list = queryDao.signUpList();
+        list.forEach(m-> m.put("timeMsg", DateHelper.getTimeDes(Long.parseLong(m.get("s_second").toString()))));
+        return list;
+    }
+}

+ 35 - 0
src/main/java/com/ssj/weixin/api/activity/vo/ActivityLogin.java

@@ -0,0 +1,35 @@
+package com.ssj.weixin.api.activity.vo;
+
+import com.ssj.bean.common.framework.core.domain.BaseRequest;
+
+/**
+ * @author sh
+ * @className ActivityLogin
+ * @description login
+ * @date 2021/4/7
+ */
+public class ActivityLogin extends BaseRequest {
+
+
+    private String phoneNum;
+
+    private String msgCode;
+
+
+    public String getPhoneNum() {
+        return phoneNum;
+    }
+
+    public void setPhoneNum(String phoneNum) {
+        this.phoneNum = phoneNum;
+    }
+
+    public String getMsgCode() {
+        return msgCode;
+    }
+
+    public void setMsgCode(String msgCode) {
+        this.msgCode = msgCode;
+    }
+
+}

+ 32 - 0
src/main/java/com/ssj/weixin/api/activity/vo/SignUpBase.java

@@ -0,0 +1,32 @@
+package com.ssj.weixin.api.activity.vo;
+
+import com.ssj.bean.common.framework.core.domain.BaseRequest;
+
+import java.util.List;
+
+/**
+ * @author sh
+ * @className SignUpBase
+ * @description request
+ * @date 2021/4/7
+ */
+public class SignUpBase extends BaseRequest {
+    private Integer type;
+    private List<SignUpVO> list;
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public List<SignUpVO> getList() {
+        return list;
+    }
+
+    public void setList(List<SignUpVO> list) {
+        this.list = list;
+    }
+}

+ 35 - 0
src/main/java/com/ssj/weixin/api/activity/vo/SignUpVO.java

@@ -0,0 +1,35 @@
+package com.ssj.weixin.api.activity.vo;
+
+import com.ssj.bean.common.framework.core.domain.BaseRequest;
+
+import java.util.List;
+
+/**
+ * @author sh
+ * @className SignUpVO
+ * @description request
+ * @date 2021/4/7
+ */
+public class SignUpVO extends BaseRequest {
+
+
+    private String subject;
+
+    private List<String> bookList;
+
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    public List<String> getBookList() {
+        return bookList;
+    }
+
+    public void setBookList(List<String> bookList) {
+        this.bookList = bookList;
+    }
+}

+ 33 - 0
src/main/java/com/ssj/weixin/filter/CorsFilter.java

@@ -0,0 +1,33 @@
+package com.ssj.weixin.filter;
+
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.*;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@Component
+@WebFilter(urlPatterns = "/*", filterName = "corsFilter")  //这里的“/*” 表示的是需要拦截的请求路径
+public class CorsFilter implements Filter {
+
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+    }
+
+    @Override
+    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+        HttpServletResponse httpResponse = (HttpServletResponse)servletResponse;
+        httpResponse.setHeader("Access-Control-Allow-Headers","Origin,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,x_requested_with,If-Modified-Since,Cache-Control,Content-Type,Authorization,content-type,accept");
+        httpResponse.setHeader("Access-Control-Allow-Credentials", "true");
+        httpResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
+        httpResponse.addHeader("Access-Control-Allow-Origin", "*");
+        filterChain.doFilter(servletRequest, httpResponse);
+    }
+
+    @Override
+    public void destroy() {
+    }
+}