Java Web 学习笔记之十四:RestEasy添加Filter过滤器预处理请求

来源:互联网 发布:剑三萝莉女神捏脸数据 编辑:程序博客网 时间:2024/06/06 05:52

RestEasy添加Filter过滤器预处理请求

前提

  • 定义filter过滤器,预处理http请求
  • 在resteasy框架下配置filter

实现功能

  • 拦截http请求,获取请求头中的Cookie信息
  • 统一处理Cookie中的token,将token信息与用户信息映射(后端业务需要)
  • 将获取到的用户信息重新放置到请求头中,作为HeaderParam传递给rest接口使用

实现步骤

编写filter代码

package xuyihao.*;import xuyihao.*.UserBindCache;import java.io.IOException;import java.util.Map;import javax.ws.rs.container.ContainerRequestContext;import javax.ws.rs.container.ContainerRequestFilter;import javax.ws.rs.core.Cookie;/** * 全局过滤器 *  * Created by xuyh at 2017年12月11日 下午4:07:39. */public class GlobalFilter implements ContainerRequestFilter {    @Override    public void filter(ContainerRequestContext requestContext) throws IOException {        Map<String, Cookie> cookieMap = requestContext.getCookies();        if (cookieMap == null || cookieMap.isEmpty())            return;        Cookie tokenCookie = cookieMap.get("token");        if (tokenCookie != null) {            String token = tokenCookie.getValue();            if (token != null && !token.isEmpty()) {                String userId = UserBindCache.getBoundUser(token);                requestContext.getHeaders().add("userId", userId);            }        }    }}

web.xml配置添加Filter注册

使用web.xml注册restEasy的,在web.xml中添加如下内容

<!-- 配置过滤器,异常处理器等 --><context-param>    <param-name>resteasy.providers</param-name>    <param-value>        xuyihao.*.GlobalFilter    </param-value></context-param>

rest接口方法中使用filter传递的请求头参数

/** * 用户登出 *  * <pre> * 需要在Cookie中设置token * </pre> * * @param userId * @return */@GET@Path("/logout")@Consumes(MediaType.APPLICATION_JSON)@Produces(MediaType.APPLICATION_JSON)public boolean logout(@HeaderParam(RestConstants.REQUEST_HEADER_NAME_USERID) String userId) throws Exception {    if (userId != null) {        getUserLogic().removeBoundUserByUserId(userId);        return true;    } else {        return false;    }}
原创粉丝点击