简单的登录网关

灰太狼 2022-11-22 00:16 196阅读 0赞
  1. import com.alibaba.fastjson.JSON;
  2. import com.hikari.cloud.base.entity.BaseResult;
  3. import com.hikari.cloud.base.entity.ReturnCode;
  4. import com.hikari.cloud.zuul.service.LoginFilterService;
  5. import com.netflix.zuul.ZuulFilter;
  6. import com.netflix.zuul.context.RequestContext;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.stereotype.Component;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13. import java.io.IOException;
  14. @Component
  15. public class LoginFilter extends ZuulFilter {
  16. @Autowired
  17. LoginFilterService loginFilterService;
  18. private Logger logger = LoggerFactory.getLogger(this.getClass());
  19. @Override
  20. public String filterType() {
  21. // 登录校验的过滤级别,肯定是第一层过滤
  22. return "pre";
  23. }
  24. @Override
  25. public int filterOrder() {
  26. // 执行顺序为1,值越小执行顺行越靠前
  27. return 1;
  28. }
  29. @Override
  30. public boolean shouldFilter() {
  31. // 默认此类过滤器时false,不开启的,需要改为true
  32. return true;
  33. }
  34. /**
  35. * 登录校验过滤器,执行逻辑的方法
  36. *
  37. * @return
  38. */
  39. @Override
  40. public Object run() {
  41. // 登录校验逻辑
  42. // 1)获取zuul提供的请求上下文对象(即是请求全部内容)
  43. RequestContext currentContext = RequestContext.getCurrentContext();
  44. // 2) 从上下文中获取request对象
  45. HttpServletRequest request = currentContext.getRequest();
  46. logger.error(String.format("%s AccessUserNameFilter request to %s", request.getMethod(), request.getRequestURL().toString()));
  47. //请求url拦截
  48. if (request.getRequestURL().toString().contains("/login") ||
  49. request.getRequestURL().toString().contains("/appLogin") ||
  50. request.getRequestURL().toString().contains("/file/getFile") ||
  51. request.getRequestURL().toString().contains("/foreign") ||
  52. request.getRequestURL().toString().contains("/common/file")) return null;
  53. // 3) 从请求中获取token
  54. String token = request.getParameter("token");
  55. // 4) 判断(如果没有token,认为用户还没有登录,返回401状态码)
  56. logger.error("===token=====" + token);
  57. // logger.error("===getParameterMap====="+JSON.toJSONString(request.getParameterMap()));
  58. boolean isValid = loginFilterService.checkToken(token);
  59. if (!isValid) {
  60. currentContext.setSendZuulResponse(false);
  61. HttpServletResponse response = currentContext.getResponse();
  62. try {
  63. response.setHeader("Content-type", "text/json;charset=UTF-8");
  64. response.setCharacterEncoding("UTF-8");
  65. response.setHeader("Access-Control-Allow-Origin", "*");
  66. response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
  67. response.setHeader("Access-Control-Max-Age", "3600");
  68. response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
  69. response.getWriter().write(JSON.toJSONString(BaseResult.result().setReturnCode(ReturnCode.CODE_1000)));
  70. } catch (IOException e) {
  71. e.printStackTrace();
  72. }
  73. logger.error("===========验证未通过=========");
  74. } else {
  75. logger.error("===========验证通过=========");
  76. }
  77. // 如果校验通过,可以考虑吧用户信息放入上下文,继续向后执行
  78. return null;
  79. }
  80. }

发表评论

表情:
评论列表 (有 0 条评论,196人围观)

还没有评论,来说两句吧...

相关阅读

    相关

    一、什么是网关 1、网关:`Gateway`又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。 大家

    相关

    一、什么是网关 网关英文名称为Gateway,又称网间连接器、协议转换器,可以在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,充当翻译器。 网关在

    相关 作用

    什么是网关 网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和路由器类似

    相关 简单FreeBSD方案

    为了验证从Internet上安装FreeBSD,近两天做了一个实验,主要介绍如何最简单地使用FreeBSD来建立一个网关,针对的目标是现在大家普遍使用的PPPoE,本文不会涉及