海阔天空

当前时间为:
欢迎大家来到海阔天空https://www.9713job.com,广告合作以及淘宝商家推广请微信联系15357240395

2020Javaweb教程:filter过滤器

未分类
2020-10-25 13:33:42
1822677238@qq.com

手机扫码查看

2020Javaweb教程:filter过滤器

filter过滤器

====================================

什么是过滤器:
Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,
对web服务器管理的所有web资源;例如Jsp,Servlet,静态图片文件或静态html文件等


进行拦截,从而实现一些特殊的功能。
例如实现URL级别的权限访问控制、过滤敏骂词汇、压缩响应信息等一些高级功能。
ServletAPI中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,
则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个
目标资源之间,对访问的请求和响应进行栏截.

如何编写过滤器:
1.编写java类实现Filter接口(servlet)
2.重写doFilter方法

public class TestFilter implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        chain.doFilter(req, resp);
    }

    public void init(FilterConfig config) throws ServletException {

    }

}

xml配置
在web.xml中进行过滤器的配置
<filter>
名称
<filter-name>sf<filter-name>
<filter-class>包名.类名<filter-class>
</filter>
映射路径配置
<filter-mapping>
名称
<filter-name>sf<filter-name>
过滤的url匹配规则和servlet的一模一样
<url-pattern>/*</url-pattern>
<filter-mapping>

====================================
Filter注解配置

注解式配置
在自定义的Filter类上使用注解@WebFilter(“/*”);

优先级
如果为注解的话,是按照类名的字符串顺序进行起作用的
如果web.xml,按照filter-mapping注册顺序,从上往下
web.xml配置高于注解方式
如果不同包、同名的filter,按照包名在排序

====================================
过滤器的初始化参数
在过滤器的创建的时候,可以传递初始化参数

第一种:基于注解的
@WebFilter(initParams={@WebInitParam(name=”version”,value=”1.0″)})

第二种:web.xml
<filter>
<init-param>
<param-name>version<param-name>
<param-value>1.0<param-value>
<init-param>
<filter>

过滤器优点
可以实现web应用程序中的预处理和后期处理逻辑
====================================
静态自动登录

loginServlet:
HttpSeesion s=request.getSession();
//收参
String uname=request.getParameter(“uname”);
String password=request.getParameter(“password”);
if(“admin”.equals(uname)&&”admin888″.equals(password)){
s.setAttribute(“uname”,uname);
Cookie cookie=new Cookie(“userinfo”,uname+”#”+password);
cookie.setPath(“/”);
cookie.setMaxAge(60*60*24*7);
response.addCookie(cookie);
response.sendRedirect(“/项目/欢迎页.html”);
}else{
response.sendRedirect(“/项目/bad.html”);
}

loginFilter:
@WebFilter(value=”/login.html”)
doFilter()方法{
//1.session里取session
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)resp;
HttpSeesion s=request.getSession();
String uname=(String)session.getAttribute(“uname”);

if(uname!=null){
response.sendRedirect(“/项目/欢迎页.html”);
}else{
Cookie[] cookies=request.getCookies();
if(cookies!=null){
for(Cookie cookie:cookies){
String names=cookie.getName();

//如果当前cookie里有userinfo的name、证明用户登录过
if(names.equals(“userinfo”)){
String value=cookie.getValue();
String[] split=value.split(“#”);
session.setAttribute(“uname”,split[0]);
response.sendRedirect(“/项目/欢迎页.html”);
}
}
}
}

//2.cookie取用户名和密码
chain.doFilter(req,resp);
}

====================================
动态自动登录

loginFilter:

@WebFilter(filterName = "LoginFilter",value = "/login.html")
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    HttpServletRequest request=(HttpServletRequest)req;
    HttpServletResponse response=(HttpServletResponse)resp;
    HttpSession session = request.getSession();
    Users users = (Users) session.getAttribute("users");
    if (users != null) {
        response.sendRedirect("/day2/home.html");
    }else{
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                String name = cookie.getName();
                if(name.equals("userinfo")){
                    String value = cookie.getValue();
                    String[] split = value.split("#");
                    UsersService us=new UsersServiceImpl();
                    Users users1 = us.checkUsers(split[0], split[1]);
                    if (users1 != null) {
                        response.sendRedirect("/day2/home.html");
                    }else{
                        response.sendRedirect("/day2/filed.html");
                    }
                }
            }
        }chain.doFilter(request,response);
    }
}
loginServlet:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");
    response.setCharacterEncoding("utf-8");
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    HttpSession session = request.getSession();
    UsersServiceImpl usi=new UsersServiceImpl();
    Users users = usi.checkUsers(username, password);
    if (users != null) {
        session.setAttribute("users",users);
        session.setAttribute("username",username);
        Cookie cookie=new Cookie("userinfo",username+"#"+password);
        cookie.setPath("/");
        cookie.setMaxAge(60*60*24*7);
        response.addCookie(cookie);
        response.sendRedirect("/day2/home.html");
    }else{
        response.sendRedirect("/day2/filed.html");
    }
}

====================================
过滤脏词

dirtyServlet:

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    HttpServletRequest request=(HttpServletRequest)req;
    chain.doFilter(new dir(request), resp);
}
static class dir extends HttpServletRequestWrapper {
    List<String> list=new ArrayList<String>();

    public dir(HttpServletRequest request) {
        super(request);
        list.add("王八蛋");
        list.add("二狗子");
        list.add("sb");
        list.add("SB");
    }

    @Override
    public String getParameter(String name) {
        String values = super.getParameter(name);
        for (String s : list) {
            if(values.equals(s)){
                values="***";
            }
        }
        return values;
    }
}

====================================
设置编码

CharacterFilter:
@WebFilter(filterName = “CharacterFilter”,value = “/*”)
req.setCharacterEncoding(“UTF-8”);
resp.setCharacterEncoding(“UTF-8”);
resp.setContentType(“text/html;charset=utf-8”);

====================================
权限管理

1.首先写三层架构(dao、entity、service)以及登录页面
2.loginFilter:

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    HttpServletRequest request=(HttpServletRequest)req;
    HttpServletResponse response=(HttpServletResponse)resp;
    HttpSession session = request.getSession();
    Users users = (Users) session.getAttribute("users");
    if (users != null) {
        response.sendRedirect("/day2/home.html");
    }else{
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                String name = cookie.getName();
                if(name.equals("userinfo")){
                    String value = cookie.getValue();
                    String[] split = value.split("#");
                    UsersService us=new UsersServiceImpl();
                    Users users1 = us.checkUsers(split[0], split[1]);
                    if (users1 != null) {
                        if(users1.getAcc()==1){
                            response.sendRedirect("/day2/admin");
                        }else {
                            response.sendRedirect("/day2/getAll");
                        }
                    }else{
                        response.sendRedirect("/day2/filed.html");
                    }
                }
            }
        }chain.doFilter(request,response);
    }
}

3.loginServlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    UsersServiceImpl usi=new UsersServiceImpl();
    Users users = usi.checkUsers(username, password);
    if (users != null) {
        Cookie cookie=new Cookie("userinfo",username+"#"+password);
        cookie.setPath("/");
        cookie.setMaxAge(60*60*24*7);
        response.addCookie(cookie);
        if(users.getAcc()==1) {
            response.sendRedirect("/day2/admin");
        }else{
            response.sendRedirect("/day2/getAll");
        }
    }else{
        response.sendRedirect("/day2/filed.html");
    }
}

4.getAllServlet:

EmpService empService=new EmpServiceImpl();
List<Emp> allEmp = empService.getAllEmp();
PrintWriter writer = response.getWriter();

writer.println(“<html>”);
writer.println(“<head>”);
writer.println(“<meta charset=’utf-8′>”);
writer.println(“<title>查询所有</title>”);
writer.println(“</head>”);
writer.println(“<body>”);
for (Emp emp : allEmp) {
writer.println(“<div>”+emp.getId()+”\n”+emp.getUname()+”\n”+emp.getAge()+”\n”+emp.getSex()+”\n”+emp.getMobile()+”</div>”);
}
writer.println(“</body>”);
writer.println(“</html>”);

5.adminServlet:

EmpService empService=new EmpServiceImpl();
List<Emp> allEmp = empService.getAllEmp();
PrintWriter writer = response.getWriter();

writer.println(“<html>”);
writer.println(“<head>”);
writer.println(“<meta charset=’utf-8′>”);
writer.println(“<title>查询所有</title>”);
writer.println(“</head>”);
writer.println(“<body>”);
for (Emp emp : allEmp) {
writer.println(“<div>”+emp.getId()+”\n”+emp.getUname()+”\n”+emp.getAge()+”\n”+emp.getSex()+”\n”+emp.getMobile()+
“</div><a href=’#’>修改</a>&nbsp;&nbsp;<a href='”+”/day11/delete?no=”+emp.getId()+”‘>删除</a>”);
}
writer.println(“</body>”);
writer.println(“</html>”);

6.deleteServlet:

String no = request.getParameter(“no”);
EmpService empService=new EmpServiceImpl();
int delete = empService.delete(Integer.valueOf(no));
if (delete > 0) {
response.sendRedirect(“/day11/admin”);
}
====================================

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注