每天学习一点点 编程PDF电子书、视频教程免费下载:
http://www.shitanlife.com/code

网站需要做用户登录鉴权控制,没有登录的话,不能访问网站,提示需要登录。

实现方式: 使用Filter对每个请求地址进行过滤判断 session ,如果登录状态,则正常访问,否则,跳入提示界面。

实现步骤:

1. 定义过滤器类 LoginFilter

@Configuration
public class LoginFilter implements Filter
{
  @Autowired
  private RestTemplate restTemplate;

  @Value("${twpaas.gateway.url:http://192.168.102.80:9000}")
  private String gatewayUrl;

  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterchain)
  throws IOException, ServletException
  {
    HttpServletResponse httpResponse = (HttpServletResponse) response;
    HttpServletRequest httpRequest = (HttpServletRequest)request;
    HttpSession session = httpRequest.getSession();

    if(httpRequest.getRequestURI().indexOf("noright") > 0)
    {
      filterchain.doFilter(request, response);
      return;
    }

    if("1".equals(session.getAttribute("loginStatus")))
    {
      // 已登录
      filterchain.doFilter(request, response);
      return;
    }
    else
    {
    if(null != httpRequest.getParameter("token"))
    {
      JSONObject obj = restTemplate.getForEntity(gatewayUrl + "/openapi-uc/uc/getUserByToken/" + httpRequest.getParameter("token"), JSONObject.class).getBody();

      if(null != obj)
      {
        Map<String, Object> entityMap = (Map<String, Object>) obj.get("responseEntity");
        if(null != entityMap)
        {
          String userId = (String) entityMap.get("userId");
          if(null != userId)
          {
            session.setAttribute("loginStatus", "1");
            // 已登录
            filterchain.doFilter(request, response);
            return;
          }
        }
      }
    }
  }

  httpResponse.sendRedirect("/noright");
  return;

  }

  @Override
  public void destroy()
  {
  }

  @Override
  public void init(FilterConfig arg0) throws ServletException
  {
  }

}

2. 加入扫描路径,使用的是springboot, 在启动类中加入扫描路径 @ComponentScan ("xxx.xxx.xxx.**.**.filter")

以上逻辑就完成了。具体请看代码,应该还是看得懂的。

每天学习一点点 编程PDF电子书、视频教程免费下载:
http://www.shitanlife.com/code

filter 实现登录状态控制的更多相关文章

  1. AOP实践--利用MVC5 Filter实现登录状态判断

    AOP有的翻译"面向切面编程",有的是"面向方面编程".其实名字不重要,思想才是核心,mvc的Filter让我们很 方便达到这种面向方面编程,就是在现有代码的基 ...

  2. Vue+Express实现登录状态权限控制

    前提须知 对Vue全家桶有基本的认知. 拥有node环境 了解express 本篇只是介绍登录状态的权限验证,以及登录,注销的前后端http交互.前端布局,后端密码验证等以后有时间再对这些内容进行补充 ...

  3. Servlet过滤器---登录权限控制

    实现了登录时权限控制:进入首页.登录页以及登录servlet时,不用验证权限:进入其它页面时,须验证是否登录,未登录则跳转到登录页. 一个简单的首页:index.jsp <%@ page lan ...

  4. 可在广域网部署运行的QQ高仿版 -- GG2014 完美版!新增支持:聊天记录、好友分组、托盘闪动消息提醒、登录状态、GIF动态表情

    距上次GG V3.7版本(可在广域网部署运行的QQ高仿版 -- GG叽叽V3.7,优化视频聊天.控制更多相关细节)的发布,已经有50天了,这50天对于GG来说,是一个重大的飞跃.因为这段时间通过一些基 ...

  5. Struts2重新学习之自定义拦截器(判断用户是否是登录状态)

    拦截器 一:1:概念:Interceptor拦截器类似于我们学习过的过滤器,是可以再action执行前后执行的代码.是web开发时,常用的技术.比如,权限控制,日志记录. 2:多个拦截器Interce ...

  6. springboot 前后端分离开发 从零到整(三、登录以及登录状态的持续)

    今天来写一下怎么登录和维持登录状态. 相信登录验证大家都比较熟悉,在Javaweb中一般保持登录状态都会用session.但如果是前后端分离的话,session的作用就没有那么明显了.对于前后端分离的 ...

  7. SpringBoot29 登录逻辑、登录状态判断

    1 知识点扫盲 浏览器和服务器之间时通过session来确定连接状态的,浏览器第一次请求时服务端会自动生成一个session,并将这个sessionId传回给浏览器,浏览器将这个sessionId存放 ...

  8. 2017.4.12 开涛shiro教程-第十八章-并发登录人数控制

    原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 开涛shiro教程-第十八章-并发登录人数控制 shiro中没有提 ...

  9. 基于cookie的用户登录状态管理

    cookie是什么 先来花5分钟看完这篇文章:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies 看完上文,相信大家对cookie已经有 ...

随机推荐

  1. Redirect all output to file

    That part is written to stderr, use 2> to redirect it. For example: foo > stdout.txt 2> std ...

  2. WORLD 文件格式的保存

    1,.docx 高版本格式. 该格式,高版本可以打开低版本的文件,低版本不一定能打开高版本的文件 2,.doc 兼容模式 高低版本都可以打开该格式的文件 3,   .PDF文件格式   我把WORLD ...

  3. Could not open input file: artisan 【Laravel初体验】

    1,情景描述:在命令行窗口写入php artisan make:model Models\MenuModel用于创建模型时,出现此错误(Could not open input file: artis ...

  4. 3:Python条件语句

    1.if基本语句 if 条件: 内部代码块 内部代码块 else …… print('……') 2.if支持嵌套 if 1==1: if 2==2 print(n1) print(n2) else: ...

  5. vue2 兼容ie8

    推荐这个 https://cdn.jsdelivr.net/npm/ractive

  6. angular ng-file-upload

    传送门:https://github.com/danialfarid/ng-file-upload#install <script src="angular(.min).js" ...

  7. day15(PYTHON)推导式{生成器,字典,列表,集合}

    #[每一个元素或者是和元素相关的操作 for 元素 in 可迭代数据类型] #遍历之后挨个处理 #[满足条件的元素相关的操作 for 元素 in 可迭代数据类型 if 元素相关的条件] #筛选功能 # ...

  8. 使用nginx代理后以及配置https后,如何获取真实的ip地址

    使用nginx代理后以及配置https后,如何获取真实的ip地址 Date:2018-8-27 14:15:51 使用nginx, apache等反向代理后,如果想获取请求的真实ip,要在nginx中 ...

  9. python 画个小猪佩奇

    不知道大家小时候有没有学习过logo语言,就是操纵一只小王八,来画各种图案.博主小学微机课就学习了这个,最近发现python的turtle包就是logo语言,所以画个小猪佩奇和大家分享. 代码来自知乎 ...

  10. mssql sqlserver 获取指定日期为本月第几个工作日

    转自:http://www.maomao365.com/?p=6771 摘要: 下文讲述工作中,需要获取指定日期在当月的工作日 下文讲述常规的指定工作日所在月的天数分析,实现思路:1 生成一个国家法定 ...