filter源代码例子

package com.king.utils;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

/**
 * <p>Title: 软件开发事业部实践项目</p>
 * <p>Description: 设置字符集</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: 东软软件股份有限公司</p>
 * @author King
 * @version 1.0
 */
public class SetCharacterEncodingFilter extends HttpServlet implements Filter
{
    /**
     * <p>[字段功能描述]</p>
     */
    private static final long serialVersionUID = 1L;

    private FilterConfig filterConfig;

    /**
     * <p>字符集编码</p>
     */
    protected String encoding;

    /**
     * <p>是否使用字符集</p>
     */
    protected boolean use;

    //Handle the passed-in FilterConfig
    /**
     * <p>初始化</p>
     * @param filterConfig
     * @author:[创建者中文名字]
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public void init(FilterConfig filterConfig)
    {
        this.filterConfig = filterConfig;
        encoding = filterConfig.getInitParameter("encoding");
        String value = filterConfig.getInitParameter("use");

        if (value == null)
        {
            use = true;
        }
        else if (value.equalsIgnoreCase("true"))
        {
            use = true;
        }
        else if (value.equalsIgnoreCase("yes"))
        {
            use = true;
        }
        else
        {
            use = false;
        }
        this.filterConfig = filterConfig;
    }

    //Process the request/response pair
    /**
     * <p>Discription:转换字符集</p>
     * @param request
     * @param response
     * @param filterChain
     * @author:[创建者中文名字]
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
    {
        try
        {
            if (use || request.getCharacterEncoding() == null)
            {
                String encoding = selectEncoding(request);
                if (encoding != null && !encoding.equals(request.getCharacterEncoding()))
                {
                    request.setCharacterEncoding(encoding);
                }
            }
            filterChain.doFilter(request, response);
        }
        catch (ServletException sx)
        {
            filterConfig.getServletContext().log(sx.getMessage());
        }
        catch (IOException iox)
        {
            filterConfig.getServletContext().log(iox.getMessage());
        }
    }

    //为子类提供扩展的能力
    protected String selectEncoding(ServletRequest request)
    {
        return encoding;
    }

    //Clean up resources
    /**
     * <p>销毁</p>
     * @author:[创建者中文名字]
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public void destroy()
    {
        encoding = null;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 防止SQL注入攻击的一种常用方法是使用预处理语句 (Prepared Statements)。在使用预处理语句时,您可以在SQL语句中包含占位符 (Placeholder),而不是直接插入用户输入的数据。 举个例子,假设我们要执行一个SELECT语句,查询用户输入的用户名和密码是否正确,我们可以这么写: ``` import mysql.connector # 连接数据库 cnx = mysql.connector.connect(user='username', password='password', host='hostname', database='dbname') cursor = cnx.cursor() # 用户输入 username = input("Enter your username: ") password = input("Enter your password: ") # 创建预处理语句 query = "SELECT * FROM users WHERE username = %s AND password = %s" cursor.execute(query, (username, password)) # 获取结果 result = cursor.fetchone() # 关闭连接 cursor.close() cnx.close() if result: print("Welcome, " + username) else: print("Invalid username or password.") ``` 这样就可以防止SQL注入攻击。 还可以使用 ORM (Object-relational mapping) 库,如SQLAlchemy,来简化操作。 举个例子 ``` from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker # 创建连接 engine = create_engine('mysql+pymysql://username:password@hostname/dbname', echo=True) # 创建会话 Session = sessionmaker(bind=engine) session = Session() # 查询 username = input("Enter your username: ") password = input("Enter your password: ") user = session.query(User).filter_by(username=username, password=password).first() if user: print("Welcome, " + username) else: print("Invalid username or password.") session.close() ``` 这样就可以防止SQL注入攻击。需要注意的是,如果使用了ORM库,需要确保使用预处理语句或是使用类似于filter_by()这样的函数来防止SQL注入。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值