过滤器

本文介绍了一种在JavaWEB开发中使用过滤器的方法,通过一个具体的登录认证过滤器实例,展示了如何实现用户验证、记录访问及数据过滤等功能,提高应用程序的安全性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实很多的JavaWEB开发并没有用到框架,也能够保证一定的安全性和效率.今天学习了一下过滤器,对用户进行统一的验证和对请求和响应的数据进行替换,屏蔽一些不雅的字句.在进行JavaWEB开发的时候,不用框架,写一些使用过滤器,我个人认为绝对能够满足应用的需求.
过滤器在WEB开发中的应用具体包括:
1 对用户进行统一的认证
2 对用户的访问请求进行记录和审核
3 对用户发送的数据进行过滤或替换
4 转换图像格式
5 对相应内容进行压缩,减少传输量
6 对请求和相应进行加密处理
7 触发资源访问事件
8 对XML的输出应用XSLT
我把第一点对用户进行统一的认证的代码贴出来
package org.sunxin.lesson.jsp.ch20;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class LogonFilter implements Filter
{
private static final String LOGON_URI="logon_uri";
private static final String HOME_URI="home_uri";

private String logon_page;
private String home_page;

public void init(FilterConfig filterConfig) throws ServletException
{
//从部署描述符中获取登录页面和首页的URI。
logon_page=filterConfig.getInitParameter(LOGON_URI);
home_page=filterConfig.getInitParameter(HOME_URI);

if(null==logon_page || null==home_page)
throw new ServletException("没有指定登录页面或主页!");
}

public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException, ServletException
{
//将请求对象和响应对象的类型转换为
//HttpServletRequest和HttpServletResponse。
HttpServletRequest httpReq=(HttpServletRequest)request;
HttpServletResponse httpResp=(HttpServletResponse)response;
HttpSession session=httpReq.getSession();

//得到用户的请求URI。
String request_uri=httpReq.getRequestURI();
//得到Web应用程序的上下文路径。
String ctxPath=httpReq.getContextPath();
//去除上下文路径,得到剩余部分的路径。
String uri=request_uri.substring(ctxPath.length());

//判断用户访问的是否是登录页面
if(logon_page.equals(uri))
{
//如果是登录页面,则通过查看是否有附加的请求参数,来判断用户
//是访问登录页面,还是提交登录信息。
String strLogon=httpReq.getParameter("action");

if("logon".equals(strLogon))
{
//如果是提交登录信息,则对用户进行验证。
String name=httpReq.getParameter("name");
String password=httpReq.getParameter("password");

if("zhangsan".equals(name) && "1234".equals(password))
{
//验证通过后,在Session对象中设置isLogon属性为true。
session.setAttribute("isLogon","true");
//在Session对象中保存用户名。
session.setAttribute("user",name);

//从请求对象中取出用户先前访问页面的URI。
String origin_uri=httpReq.getParameter("origin_uri");
//如果origin_uri不为空,则将客户端重定向到用户先前访问的页面,
//否则将客户端重定向到首页。
if(null!=origin_uri && !"".equals(origin_uri))
{
httpResp.sendRedirect(origin_uri);
}
else
{
httpResp.sendRedirect(ctxPath+home_page);
}
return;
}
else
{
//如果验证失败,则从请求对象中获取用户先前访问页面的URI。
//如果该URI存在,则再次将它作为origin_uri属性的值保存
//到请求对象中。
String origin_uri=httpReq.getParameter("origin_uri");
if(null!=origin_uri && !"".equals(origin_uri))
{
httpReq.setAttribute("origin_uri",origin_uri);
}
httpResp.setContentType("text/html;charset=GB2312");
PrintWriter out=httpResp.getWriter();
out.println("<h2>用户名或密码错误,请重新输入。</h2>");
RequestDispatcher rd=httpReq.getRequestDispatcher(logon_page);
rd.include(httpReq,httpResp);
return;
}
}
else
{
//如果用户不是提交登录信息,则调用chain.doFilter()方法,
//调用登录页面。
chain.doFilter(request, response);
return;
}
}
else
{
//如果访问的不是登录页面,则判断用户是否已经登录。
String isLogon=(String)session.getAttribute("isLogon");
if("true".equals(isLogon))
{
chain.doFilter(request, response);
return;
}
else
{
//如果用户没有登录,则将用户的请求URI作为origin_uri属性的值
//保存到请求对象中。
String strQuery=httpReq.getQueryString();
if(null!=strQuery)
{
request_uri=request_uri+"?"+strQuery;
}
httpReq.setAttribute("origin_uri",request_uri);

//将用户请求转发给登录页面。
RequestDispatcher rd=httpReq.getRequestDispatcher(logon_page);
rd.forward(httpReq,httpResp);
return;
}
}
}

public void destroy(){}
}
内容概要:本书《Deep Reinforcement Learning with Guaranteed Performance》探讨了基于李雅普诺夫方法的深度强化学习及其在非线性系统最优控制中的应用。书中提出了一种近似最优自适应控制方法,结合泰勒展开、神经网络、估计器设计及滑模控制思想,解决了不同场景下的跟踪控制问题。该方法不仅保证了性能指标的渐近收敛,还确保了跟踪误差的渐近收敛至零。此外,书中还涉及了执行器饱和、冗余解析等问题,并提出了新的冗余解析方法,验证了所提方法的有效性和优越性。 适合人群:研究生及以上学历的研究人员,特别是从事自适应/最优控制、机器人学和动态神经网络领域的学术界和工业界研究人员。 使用场景及目标:①研究非线性系统的最优控制问题,特别是在存在输入约束和系统动力学的情况下;②解决带有参数不确定性的线性和非线性系统的跟踪控制问题;③探索基于李雅普诺夫方法的深度强化学习在非线性系统控制中的应用;④设计和验证针对冗余机械臂的新型冗余解析方法。 其他说明:本书分为七章,每章内容相对独立,便于读者理解。书中不仅提供了理论分析,还通过实际应用(如欠驱动船舶、冗余机械臂)验证了所提方法的有效性。此外,作者鼓励读者通过仿真和实验进一步验证书中提出的理论和技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值