Servlet 过滤器
作用:把某些信息过滤掉
1、滤器可以做什么?
(1) 对请求进行统一编码---》乱码处理功能
(2) 对请求进行认证---》强制登录
(3)过滤非法字符---》非法字段
2、实现方式
一、实现 Filter 接口
案例1:过滤乱码
//重写doFilter方法
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest) arg0;//转为HttpServletRequest
HttpServletResponse response=(HttpServletResponse) arg1;//转为HttpServletResponse
request.setCharacterEncoding("utf-8");//请求编码
response.setCharacterEncoding("utf-8");//响应编码
response.setContentType("text/html;charset=utf-8");//设置响应编码类型
arg2.doFilter(request, response);//条件成立则放行
}
Servlet容器将先调用过滤器的doFilter方法。FilterChain用户访问后续过滤器。
二、配置web.xml
<!-- 配置过滤器 -->
<filter>
<filter-name>q1</filter-name>
<filter-class>com.xdl.filter.FilterEncoding
</filter-class>
</filter>
<filter-mapping>
<filter-name>q1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
三、案例2:过滤非法字符
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest) arg0;
HttpServletResponse response=(HttpServletResponse) arg1;
String jl = request.getParameter("jl");//取 :简历中的内容
// if(jl!=null&&(jl.contains("小日本")||jl.contains("坏蛋"))){
// response.sendRedirect("filter.jsp");
// }else{
// arg2.doFilter(request, response);//放行
// }
PersonDaoImpl db=new PersonDaoImpl();//实例化数据库
List<String> findSpeak = db.findSpeak();//找出扎有表中speka字段的信息
boolean flag=false;
for(String ss:findSpeak){
if(jl.contains(ss)){//找到此信息,则为非法,然后就把flag设置为 true
flag=true;
}
}
if(jl!=null&&flag){
System.out.println("重点关注此人:"+request.getRemoteAddr());
response.sendRedirect("filter.jsp");
}else{
arg2.doFilter(request, response);//放行
}
}
web.xml配置
<filter>
<filter-name>q2</filter-name>
<filter-class>com.xdl.filter.FilterSpeak</filter-class>
</filter>
<filter-mapping>
<filter-name>q2</filter-name>
<url-pattern>/SaveServlet</url-pattern>
</filter-mapping>
四、案例3:强制登录
//@WebFilter("/ListServlet")也可以通过全注解方式实现过滤器,只过滤ListServlet 如果用/*则全过滤 ,此时web.xml不用配置
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest) arg0;
HttpServletResponse response=(HttpServletResponse) arg1;
HttpSession session = request.getSession();
String username = (String) session.getAttribute("usename");
if(username==null){
response.sendRedirect(request.getContextPath()+"/index.jsp");//去登录
}else{
arg2.doFilter(request, response);//通过后,放行
}
}
监听器
Servlet监听器也叫做 listener,通过它可以监听Web应用的上下文(环境)信息、Servlet请求信息、Servlet会话信息,并自动根据不同情况,在后台调用相 应的处理程序。通过监听器,可以自动激发一些操作
public class Listener1 implements HttpSessionListener, ServletContextListener,
ServletRequestListener {
......}
//配置 web.xml;
<listener>
<listener-class>com.xdl.listener.Listener1</listener-class>
</listener>
Md5加密
一、作用:MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆,即安全性较高,目前情况下md5128位加密认为是不可解的
123+12--》135 加密码 ,解密-->135-12>123 就是将来可能会到rsa加密码算法,分为 公有密钥和私有密钥
二、开发实现
1、只需从百度找一个md5的文件即可:MD5Utils
2、开发注册功能
public void saveUser(User uu) {
String sql = "insert into stu values(stu_seq.nextval,?,?)";
// 把密码进行md5加密
executeUpdate(
sql,
new Object[] { uu.getName(), MD5Utils.MD5Src(uu.getPassword()) });
}
3、开发登录功能
public boolean loginUser(User uu) {
String sql = "select * from stu where name=? and password=?";// 由用户和密码作条件
ResultSet rs = executeQuery(
sql,
new Object[] { uu.getName(), MD5Utils.MD5Src(uu.getPassword()) });
try {
if (rs.next()) { // 如果找到了
return true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}