一、描述

在提供安卓、IOS客户端接口时,可以在登陆接口分配Session给客户端,用于判断其他接口是否是合法访问,以避免将所有的接口都暴露在web中可以由路径直接访问。但是最近的一个项目中的移动接口并没有给客户端分配Session,所以所有的接口都可以通过路径直接访问,这种方式会存在一定的风险性,只能通过接口对参数进行更精确的验证。一般情况下为方便管理会将所有接口单独放到WebRoot下单独一个文件夹目录下如WebRoot/appreq。改目录下的接口可直接被访问,如:http://localhost:8080/WebTest/appreq/agreement.jsp ;所以有必要对appreq目录下的jsp做访问限制。因此想到可以用Filter过滤器来实现对请求的过滤。关于过滤器的学习和使用可以查看园内这个博客,写的很详细:http://www.cnblogs.com/xdp-gacl/p/3948353.html

二、实现

a) 新建一个实现Filter接口的类,并实现接口定义的方法,其中doFilter()方法中就是你定义的这个过滤器里要实现的功能,代码如下:

 package com.app.util;

 import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class AppRequestFilter implements Filter{ @Override
public void destroy() {
// TODO Auto-generated method stub } @Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println(" filter begin ");
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)resp;
Object userid = request.getSession().getAttribute("current_user_id");
if (userid == null) {
//定义返回信息
Map<String,Object> map = new HashMap<String,Object>();
map.put("status", -1);
map.put("data", null);
map.put("msg", "you not login the system... can't request resource !");
PrintWriter writer = response.getWriter();
//这里使用fastjson.jar返回JSON数据;
writer.print( com.alibaba.fastjson.JSONArray.toJSONString(map));
writer.flush();
writer.close();
}else{
chain.doFilter(req, resp);
}
System.out.println(" filter end ");
} @Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub } }

b) 上面就将过滤器建好了,现在只要在web.xml中配置上去或者叫注册,这个过滤器就可以发挥作用了。

   <filter>
<filter-name>AppRequest</filter-name>
<filter-class>com.app.util.AppRequestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AppRequest</filter-name>
<url-pattern>/appinter/*</url-pattern>
</filter-mapping>

c) 致此,appinter下的接口就多了一层保护,没有登录获取session的话就会直接返回JSON提示信息让客户端处理:JSON返回实例如:{"msg":"you not login the system... can't request resource !","status":-1} 。

补充:

a) 为了让接口尽量规范,所以JSON返回格式要规定,至少三项:status状态码、msg状态信息、data数据,分别是String/String/Object类型;但是上面的JSON结果为什么没有data字段了呢,是因为用的fastjson.jar这个jar包的原因,因为这个jar包会自动把null值的字段过滤掉不显示,这一点安卓客户端解析每次都要判断会比较麻烦,实际使用可以考虑用其他JSON工具。

b) 登陆的时候如何分配Session给客户端,如果是用struts可以用这个得到Session:

Map session=ActionContext.getContext().getSession(); 然后往里面添上验证的信息也就是session.put("current_user_id", au.getId()),然后将session返回给客户端。

以上内容,记以温查。

Filter过滤器简单应用( 接口访问控制 )的更多相关文章

  1. Filter过滤器简单学习

    Servlet 过滤器方法 过滤器是一个实现了 javax.servlet.Filter 接口的 Java 类.javax.servlet.Filter 接口定义了三个方法: 序号 方法 & ...

  2. vue filter过滤器简单应用

    vue中过滤器,用于一些常见的文本格式化,用 | 来操作. 过滤器可以用在两个地方: 1.在{{}}双花括号中插入值 2.v-bind表达式中使用 <!-- 在双花括号中 --> {{ m ...

  3. spring boot Filter过滤器的简单使用

    springboot使用Filter过滤器有两种方式: 一种是实现Filter接口然后通过@Component注解向项目加入过滤器 另一种是通过配置类来配置过滤器 @Component public ...

  4. Servlet中的Filter 过滤器的简单使用!

    package com.aaa.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servle ...

  5. Filter过滤器(1)

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

  6. JavaWeb(五)Filter过滤器

    Filter过滤器 Fileter介绍 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Serv ...

  7. filter 过滤器(监听)

    Filter 过滤器 1.简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, ...

  8. Filter(过滤器)学习

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...

  9. javaweb学习总结(四十二)——Filter(过滤器)学习

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...

随机推荐

  1. MySql数据库索引原理

    写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录.如果没有索引,查询将 ...

  2. CentOS7 桌面的安装

    对于linux桌面的安装,我们还是要先安装yum 1:查询桌面组件是否安装成功 yum grouplist #查询桌面组件 #由于我这里安装了,所以桌面菜单显示在已安装 2:选取我们要安装的组件 yu ...

  3. asp 实现域名转向

    <% host=lcase(request.servervariables("HTTP_HOST")) select CASE host CASE "aa.cn&q ...

  4. Eclipse tomcat插件禁用热加载

    Eclipse中的tomcat插件默认是开户了热加载,只要是修改了java文件一保存,tomcat自动编译.加载.发布,很吃内存. 关闭方法: 打开eclipse,找到server项: 双击打开,修改 ...

  5. .NET EXCEL NPOI 图片

    今天闲来无事写了下 “ .NET  用  NPOI 组件 将 图片文件 写到 EXCEL 中  ” 先看效果: 头是我加的,这个应该不是难事! 再看代码: private void button1_C ...

  6. help和dir函数

    help()函数是查看函数或模块用途的详细说明,比如:help('re'),help('re.split') 而dir()函数是查看函数或模块内的操作方法都有什么,输出的是方法列表.

  7. JavaScript插件架构

    1.HTML布局规则 默认情况下,所有的插件都可以通过设置特定的HTML代码和相应的属性来实现.也就是说,在网页加载的时候,JavaScript代码会自动检测这些标记,并自动绑定相应的事件,而无需添加 ...

  8. volley_之基本使用

    Volley的基本使用-------------- 本人初学,如有纰缪,望指正~ Volley是Google在2003年的I/O大会上推出的通信框架,结合了AsyncHttpClient和Univer ...

  9. 命令别名alias设置

    <转:http://vbird.dic.ksu.edu.tw/linux_basic/0320bash_3.php> 命令别名配置: alias, unalias 命令别名是一个很有趣的东 ...

  10. [ActionScript 3.0] AS3.0 对象在矩形范围随机运动

    package com.views { import flash.display.Bitmap; import flash.display.MovieClip; import flash.displa ...