Filter 过滤器

举报
兰舟千帆 发表于 2022/07/21 19:10:24 2022/07/21
【摘要】 Filter 过滤器从之前我们的项目运行中我们可以发现,只要我们开启服务器,输入资源访问路径就可以访问到对应的路径。但是这样其实是不合理的,这样可能导致的问题是,我们不需要登录密码就可以访问到数据库表,我们直接访问到资源路径,只要我们输入路径就可以。所以我们可以用到过空滤器,让用户在只有通过某些路径或者说是验证资源路径才可以访问到资源。针对以上项目,我们可以这样加入一个过滤器。packag...

Filter 过滤器

从之前我们的项目运行中我们可以发现,只要我们开启服务器,输入资源访问路径就可以访问到对应的路径。但是这样其实是不合理的,这样可能导致的问题是,我们不需要登录密码就可以访问到数据库表,我们直接访问到资源路径,只要我们输入路径就可以。

所以我们可以用到过空滤器,让用户在只有通过某些路径或者说是验证资源路径才可以访问到资源。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

针对以上项目,我们可以这样加入一个过滤器。

package com.jgdabc.web.filter;

import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebFilter("*.jsp")//可以认为默认拦截的所有以.jsp结尾的文件
public class LoginFilter implements Filter {
    public void init(FilterConfig config) throws ServletException {
    }

    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
//        1判断对应的session是否有user
        //判断访问的资源路径是否和登录注册相关
        String[] urls = {"/video/","index.html","index.jsp","login.jsp","/imgs/","/css/","loginServlet","register.jsp","/registerServlet","/checkCodeServlet"};

        HttpServletRequest req = (HttpServletRequest) request;
        String url = req.getRequestURI().toString();
		//放行的资源文件。具体的逻辑可以查看上面流程。
        for(String u:urls)
        {
            if(url.contains(u)){
                chain.doFilter(request,response);
                return;

            }
        }
        HttpSession session = req.getSession();
        Object user = session.getAttribute("user");
//        判断user是否为null
        if(user!=null)
        {
            chain.doFilter(request, response);
        }else
        {
//
            req.setAttribute("login_msg","您尚未登录");
            req.getRequestDispatcher("/login.jsp").forward(req,response);
        }


    }
}

在这里插入图片描述

一些说明

为什么删除字段编号还会连续

其实id作为主键的话,在数据库中进行删除这样的操作,会造成id值不连续,也就是断层。
在这里插入图片描述
但是我们看页面展示其实是很连续的。
在这里插入图片描述
还是从一开始编号

为什么会这样?注意观察。

在这里插入图片描述

我们一般用<c:forEach> 来遍历需要的数据,为了方便使用,varStatus属性可以方便我们实现一些与行数相关的功能,varStatus 是循环索引。
如:奇数行、偶数行差异;最后一行特殊处理等等。先就varStatus属性常用参数总结下:
s t a t u s . i n d e x 输出行号,从 0 开始。 {status.index} 输出行号,从0开始。 {status.count} 输出行号,从1开始。
s t a t u s . c u r r e n t 当前这次迭代的(集合中的)项 {status.current} 当前这次迭代的(集合中的)项 {status.first} 判断当前项是否为集合中的第一项,返回值为true或false
${status.last} 判断当前项是否为集合中的最后一项,返回值为true或false
begin、end、step分别表示:起始序号,结束序号,跳跃步伐。
而var 是你要循环集合的别名

这是一个知识点。
brand是我们对数据库字段封装的对象,我们不管数据库导入id是怎样的顺序,我们遍历展示的时候使用这个方法还是会从1开始排序。

后续说明

我发现有时候我前一天打开idea运行项目的时候好好的,第二天就报错了。可能的原因是什么?因为我没有保存报错截图,我大致说一下。

maven爆红的解决办法就是自己再重新加载一遍,也就是将依赖重新导入一遍。还需要观察idea的仓库配置是不是又还原到了默认,如果还原到了默认就可能在c盘去找东西去了,这样肯定会和你之前的库不一样,所以会报红,那你不想到c盘,你就调回去。

实在不行啊,就清理缓存吗,重新加载。
在这里插入图片描述
还有可能出现映射多次的问题,大致意思就是说你的映射url多了。你具体看信息,里面有说明的,这一点很重要。
网上大部分会说你的Servlet 的url和web.xml重复了,也就是你重复配置了。但是如果你找了发现你没有,那可能就是生命周期的问题,具体和target有关,我就不多说了,你可以尝试这样。
在这里插入图片描述
在这里插入图片描述

也就是先clean再install。我有一次就是这样解决的。

另外啊,最好在退出idea的时候你把项目服务停下。

这是我自己的见解。后面的问题遇到再说。

注:未完续更
我相信总结逻辑细节十分重要的。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。