当前位置: 首页 > news >正文

过滤器的功能实现

场景描述:

非登录状态下,访问目标页面,登录之后直接进入目标页面而非首页

解决方案:

  • 过滤器代码:
@WebFilter(urlPatterns = {"/user/userInfo"})
public class CheckLoginFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        //获取请求对象
        HttpServletRequest req = (HttpServletRequest) request;
        //获取响应对象
        HttpServletResponse res = (HttpServletResponse) response;
        //从session中获取用户对象
        User user = (User) req.getSession().getAttribute("user");
        //如果用户为空
        if (user == null) {
            //通过请求对象获取请求地址
            String uri = req.getRequestURI();
            //添加请求地址到session中
            req.getSession().setAttribute("uri", uri);
            //打印请求地址
            System.out.println("用户想要访问的地址:" + uri);
            //重定向到用户登录页面
            res.sendRedirect("/user/loginUI");
        } else {
            //否则直接放行
            chain.doFilter(req, res);
        }

    }

    @Override
    public void destroy() {

    }
}
复制代码
  • 控制器代码:
@Controller
@RequestMapping("/user")
public class UserController {
    @PostMapping("/login")
    public String login(HttpSession session, String username, String password,Model model) {
        //通过用户名和密码查询用户
        User user = userService.findOne(username, password);
        //如果用户不为空,通过session获取用户对象
        if (user != null) {
            //保存登录状态
            session.setAttribute("user", user);
            //通过session获取请求地址
            String uri = (String) session.getAttribute("uri");
            //如果请求地址不为空,重定向到目标页面
            if (uri != null) {
                return "redirect:" + uri;
            }
            //否则回到首页
            return "redirect:/";

        }
        //如果用户为空,返回错误信息
        model.addAttribute("msg","用户名或密码错误");
        //转发到登录页面
        return "login";
    }
}
复制代码

相关文章:

  • ps:建立规则选区
  • 巴克莱银行聚焦于业务产出的做法
  • Scala学习笔记(1)
  • Ubuntu 下解压tar.xz方法
  • Java深究之String、StringBuffer、StringBuilder的区别
  • 主题 :学习与自我提升
  • php 向关联数组头部插入key value 保持数组关系不变
  • excel导出 ajax错误判断 数据为空判断
  • 分分钟用上C#中的委托和事件
  • python-day2-06-列表
  • 【短文】为什么我不在PHP的私有变量用下划线了?
  • angular-路由与导航部分梳理
  • C# Web Api一个小例子
  • 数塔-动态规划-ccf
  • 【Matplotlib】利用Python进行绘图
  • 【译】JS基础算法脚本:字符串结尾
  • 【comparator, comparable】小总结
  • CentOS 7 防火墙操作
  • iOS 系统授权开发
  • js中的正则表达式入门
  • ng6--错误信息小结(持续更新)
  • Promise面试题2实现异步串行执行
  • redis学习笔记(三):列表、集合、有序集合
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • vue数据传递--我有特殊的实现技巧
  • 安卓应用性能调试和优化经验分享
  • 记一次删除Git记录中的大文件的过程
  • 老板让我十分钟上手nx-admin
  • 山寨一个 Promise
  • 一道面试题引发的“血案”
  • 一起参Ember.js讨论、问答社区。
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #Linux(帮助手册)
  • #mysql 8.0 踩坑日记
  • #stm32驱动外设模块总结w5500模块
  • #大学#套接字
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (4) PIVOT 和 UPIVOT 的使用
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • .net refrector
  • .net web项目 调用webService
  • .net 获取url的方法
  • .NET6 命令行启动及发布单个Exe文件
  • /etc/shadow字段详解
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [BZOJ4010]菜肴制作
  • [C# 网络编程系列]专题六:UDP编程