需求描述:
在网站中有一些网页是受保护的,即只有规定的用户才能访问,而有一些网页任何人都可以访问。所以用户在IE中输入URL提交后,服务器必须对用户输入的URL进行分析过虑。
分析:
需要考虑的问题:
1、 怎么拦截用户输入的URL?
2、 怎么判断输入的URL是否是受保护的?
3、 在用户量很大的情况下,每一个URL都要进行判断,怎样提高判断的性能?
方法:
1、 在web.xml中可以定义filter,服务器会更据filter的定义进行拦截,以及相应的处理。例如下面的配置:
<filter>
<filter-name>webfilter</filter-name>
<filter-class>com.cyberway.web.filter.WebFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>webfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
filter-name:定义过滤器的名称
filter-class:定义过滤器处理的类
url-pattern:定义拦截url
/*:表示所有的都拦截
*.jsp:只拦截jsp文件
2、利用数据库把需要保护的URL保存起来,每请求一次,检测一次。
3、如果每请求一次,都去数据库访问检测一次,这样性能一定会非常差的。网站稳定以后受保护的页面一般更新较少,我们可以第一次请求时,从数据库中获取所有的受保护页面,保存在hashtble中,然后每次从hashtable中进行检测。如果更新了受保护页面,则需更新hashtable。其实就是一种catch模式。事例代码如下:
public class URLHelper{
private static URLHelper me;
private HashTable urlTable;
private Boolean hasInit=false;
static{
me=new URLHelper();
}
private URLHelper(){
}
public URLHelper getInstance(){
return me;
}
public Boolean isHasInit{
return hasInit;
}
public void init(){
urlTable=new HashTable();
Collection datas=getAllURLs();
Iterator it=datas.iterator();
while(it.hasNext()){
URLVO vo=(URLVO)it.next(); //URLVO:一个记录URL信息的实体类
urlTable.put(vo.URL,vo);
}
}
//根据URL判断是否上受保护的
public boolean isProtected(String url) {
return urlTable.containsKey(url);
}
private Collection getAllURLs(){
//从数据库中获取所受保护网页
}
}
WebFilter类如下:
public class WebFilter extends HttpServlet implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws ServletException {
try {
request.setCharacterEncoding("GBK");
HttpServletRequest hreq = (HttpServletRequest) request;
HttpServletResponse hres = (HttpServletResponse) response;
HttpSession session = hreq.getSession();
ServletContext context = session.getServletContext();
String currentURL = hreq.getRequestURI();//返回不带参数URL
/String preURL = hreq.getHeader("referer");//返回上一页URL
String urlParam = hreq.getQueryString();//返回当前URL的参数
String currentURLpara = null;
// check if is requesting a protect resource
if (currentURL != null) {
//String contextPath = hreq.getContextPath();//返回 "/webroot"
URLHelper helper=URLHelper.getInstance();
if(helper. isProtected(currentURL)){
setForward(currentURL)
}else{
setForward(”error.jsp”);
}
}
filterChain.doFilter(request, response);
}catch (ServletException sx) {
filterConfig.getServletContext().log(sx.getMessage());
}catch (IOException iox) {
filterConfig.getServletContext().log(iox.getMessage());
}catch (Exception ex) {
filterConfig.getServletContext().log(ex.getMessage());
}
}
//forward一个页面
private void setForward(String url, ServletRequest request,
ServletResponse response) throws Exception {
HttpServletRequest hreq = (HttpServletRequest) request;
RequestDispatcher dispatcher = hreq.getSession().getServletContext()
.getRequestDispatcher(url);
dispatcher.forward(request, response);
}
}
分享到:
相关推荐
3. **登录验证**:在用户访问受保护资源之前,过滤器可以检查用户是否已登录,未登录则重定向到登录页面。 4. **缓存控制**:设置响应头,控制浏览器缓存策略,防止敏感信息被缓存。 5. **日志记录**:记录请求...
这是一款使用CSS3过滤器(CSS3 Filters)和Vibrant.js制作的效果非常炫酷的图片颜色提取幻灯片特效插件。这个图片颜色提取特效可以将当前页面中显示的图片的主要色调提取出来,显示在下方方格中。
而“fastLiveFilter”则是一个针对jQuery设计的轻量级过滤器插件,专用于提高数据筛选和实时搜索的效率。这个插件尤其适合那些需要在大量数据中快速定位信息的场景,如表格、列表等。 标题中的“简单实用轻量级”...
任何数据源的过滤器面板,用 AngularJS 制作 介绍 Tne 过滤器面板是一个 Angular 指令,您可以将其包含在任何 HTML 页面中,将其绑定到控制器,它将为您提供一个非常简单、非常快速且非常有用的工具来过滤显示在网格...
在“近期峰会”页面,学生们可能需要用JavaScript处理表格数据,例如动态加载、排序或过滤。而“精彩瞬间”页面,可以利用JavaScript实现鼠标经过图片的预览效果,通过事件监听和DOM操作来控制图片的显示。最后,...
总结来说,jQuery的可见性过滤选择器`:visible`和`:hidden`是开发者在处理页面动态显示和隐藏元素时的有力工具。它们不仅可以单独使用,还能与其他jQuery方法配合,实现更多样的交互效果。了解并熟练掌握这些选择器...
在提供的"demo"文件中,可能包含了一个简单的HTML页面和对应的JavaScript代码,用于展示如何运用属性过滤选择器来操作表单元素。通过查看和运行这个示例,你可以直观地理解这些选择器的工作方式。 总结,JQ表单对象...
假设我们要制作一个具有多个过滤器选项参数的高级搜索页面。 没有雄辩过滤器的简单实现 请求URI可能如下所示: http://localhost:8000/users/index?age_more_than=25&gender=male&created_at=25-09-2019 Controller...
【jsp实训代码】这个主题主要涉及的是在Java服务器页面(JSP)中使用过滤器(Filter)进行权限控制的技术。在Web开发中,过滤器是一个非常重要的组件,它能够对HTTP请求和响应进行预处理或后处理,实现如身份验证、...
**jQuery图片筛选过滤器插件详解** 在网页开发中,图片展示往往是一个重要的部分,而如何让用户更加方便地浏览和筛选这些图片,是提升用户体验的关键。`jQuery图片筛选过滤器插件`就是为了满足这一需求而设计的。这...
它可以实现数据的分页、排序、过滤等功能,同时支持自定义列头、行样式和操作列。在这个简单的后台页面中,表格可能用于展示各种信息,如用户列表、订单记录等。开发者可以通过LigerUI提供的API进行数据绑定,实现增...
4. 文件上传页面:如果名片设计包含图片,用户可以在这个页面上传图片文件,STRUTS2支持文件上传功能,通过配置ActionForm和相应的过滤器实现。 为了运行这个项目,你需要导入STRUTS2的核心库,包括struts2-core、...
在数据库中建立表T_BOOK,它包含图书ID、...编写一个应用,在登录页面中让用户选择“是否保存登录状态”,如果保存,后面用户访问各个页面时由过滤器来进行Cookie检查,如果Cookie检查通过验证,则直接跳转到欢迎页面。
在本文中,我们将深入探讨如何使用jQuery实现一个类似于京东商品的多条件过滤功能。这个功能允许用户根据多个筛选条件快速定位到他们感兴趣的商品,提高用户体验并优化网站的交互设计。 首先,我们需要理解jQuery的...
ASP脚本会接收用户的输入,可能有文本编辑器支持,然后对内容进行处理,比如格式化,过滤恶意内容等。 4. **写日记(writely.asp)**:这可能是用于编写日记的页面,提供一个富文本编辑器让用户可以方便地输入内容...
9. **事件过滤器(Event Filters)**:通过安装事件过滤器,开发者可以监听并处理特定的事件,例如在滑动窗口中可能需要捕获鼠标或触摸屏的特定事件。 为了实现滑动窗口,开发者可能需要编写额外的代码来处理滑动...
5. **过滤器和监听器**:过滤器(Filter)在请求到达目标Servlet或JSP之前进行预处理,如字符编码转换、权限验证等。监听器(Listener)则监听特定的事件,如session创建、销毁,以及ServletContext的变化,实现动态...
2. **定制规则**:高级的下载器允许用户设定下载规则,比如只下载特定类型的文件(如.html、.css、.js等),或者根据URL模式过滤不需要的页面。 3. **保持目录结构**:下载器会尽可能保留网页原有的目录结构,使得...
在主题制作的整个流程中,你还需要关注WordPress的过滤器和动作钩子(hooks),这些是WordPress扩展性和灵活性的关键。通过使用这些钩子,你可以修改WordPress的行为,或者在特定的点注入自定义代码,而不需要修改...
通过选择器(如类选择器、ID选择器、元素选择器等),可以指定特定元素的样式。天猫网站需要有专业的UI设计,CSS可以实现复杂的布局,如网格系统、定位和浮动,以及响应式设计,确保在不同设备上都能良好显示。 ...