UserAgentInterceptor.java 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package com.persagy.calendar.aop;
  2. import javax.servlet.http.HttpServletRequest;
  3. import javax.servlet.http.HttpServletResponse;
  4. import org.apache.http.entity.ContentType;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.stereotype.Component;
  7. import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
  8. import com.alibaba.fastjson.JSONObject;
  9. import com.persagy.common.enums.ResponseCode;
  10. import com.persagy.common.exception.BusinessException;
  11. import com.persagy.common.utils.StringUtil;
  12. import cn.hutool.http.HttpUtil;
  13. import cn.hutool.http.useragent.Browser;
  14. import cn.hutool.http.useragent.UserAgent;
  15. import cn.hutool.http.useragent.UserAgentUtil;
  16. /**
  17. * 非浏览器请求直接拒绝
  18. *
  19. * @version 1.0.0
  20. * @company persagy
  21. * @author zhangqiankun
  22. * @date 2022年3月21日 下午6:27:39
  23. */
  24. @Component
  25. public class UserAgentInterceptor extends HandlerInterceptorAdapter {
  26. @Value("${calendar.person.center.url:http://127.0.0.1:8814}")
  27. private String personUrl;
  28. @Value("${calendar.user.agent.browser:false}")
  29. private boolean isUserAgent;
  30. @Override
  31. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  32. if (isUserAgent) {
  33. UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent"));
  34. Browser browser = userAgent == null ? null : userAgent.getBrowser();
  35. if (browser == null || "Unknown".equalsIgnoreCase(browser.getName())) {
  36. throw new BusinessException("非法请求");
  37. }
  38. String token = request.getHeader("Authorization");
  39. JSONObject params = new JSONObject();
  40. params.put("token", token);
  41. String url = personUrl + "/user/checkToken";
  42. String responseStr = HttpUtil.createPost(url).body(params.toJSONString(),
  43. ContentType.APPLICATION_JSON.toString()).timeout(180*1000).execute().body();
  44. if (StringUtil.isBlank(responseStr)) {
  45. throw new BusinessException("token校验异常");
  46. }
  47. JSONObject parseObject = JSONObject.parseObject(responseStr);
  48. String code = parseObject.getString("respCode");
  49. if (!ResponseCode.A00000.getCode().equals(code)) {
  50. throw new BusinessException("token校验异常");
  51. }
  52. }
  53. return super.preHandle(request, response, handler);
  54. }
  55. }