身份认证对接Filter过滤器

问题

在与深证信息职业学院系统身份认证的时候,该系统默认会在我们的回调地址栏加上;jsessionid=6EEB42B0546A1B057BD37A628CAE646F这个参数,导致我们http://10.10.16.172:8080/csos/f/PCRepairsMobile/getRedict;jsessionid=6EEB42B0546A1B057BD37A628CAE646F 我们的回调地址出现400错误,调用不到http://10.10.16.172:8080/csos/f/PCRepairsMobile/getRedict这个接口

分析:

解决方案1:

可以在回调地址加上?就可以解决该问题,http://10.10.16.172:8080/csos/f/PCRepairsMobile/getRedict? ;jsessionid=6EEB42B0546A1B057BD37A628CAE646F

结果:

   1.该系统默认会把我们回调地址?之后的参数加在;jsessionid=6EEB42B0546A1B057BD37A628CAE646F后面,如下形式:http://10.10.16.172:8080/csos/f/PCRepairsMobile/getRedict;jsessionid=6EEB42B0546A1B057BD37A628CAE646F?该地址还是无效形式

解决方案2:

   1.可以让对接的认证系统对我们的回调地址返回前缀加上?也可以解决该问题

结果:

    1. 对接系统系统也是从其他公司购买的,修改不了代码

解决方案3:

    1.通过与必棋的讨论,实际上,只要系统能拦截到400这个地址的请求,就可以对该地址进行修改,或者直接返回

过程

    1.先进行demo的测试,查看系统是否可以400这个请求是否可以经过系统。发现是需要请求到系统中的,所以该方案是可以行的。
    2. 对该拦截看是使用过滤器(Filter)还是拦截器(Interceptor)

结论:使用拦截器

  • Filter需要在web.xml中配置,依赖于Servlet

  • Interceptor需要在SpringMVC中配置,依赖于框架

  • Filter的执行顺序在Interceptor之前

  • 两者的本质区别:拦截器(Interceptor)是基于Java的反射机制,而过滤器(Filter)是基于函数回调。从灵活性上说拦截器功能更强大些,Filter能做的事情,都能做,而且可以在请求前,请求后执行,比较灵活。Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验(比较泛的,比如登录不登录之类),太细的话,还是建议用interceptor。不过还是根据不同情况选择合适的。

结果:

1.在web.xml中线进行配置过拦截的地址进行配置,注意:需要注意filter的顺序。

<filter>
   <filter-name>My Filter</filter-name>
   <filter-class>com.thinkgem.jeesite.modules.sys.interceptor.MyFilter</filter-class>
</filter>
<filter-mapping>
   <filter-name>My Filter</filter-name>
   <url-pattern>/f/*</url-pattern>
</filter-mapping>

2.实现Filter,实现自己的业务,进行跳转。

public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest)servletRequest;
        HttpServletResponse response = (HttpServletResponse)servletResponse;
        String requestURI = req.getRequestURI();
        //身份认证 web端和移动端做一个地址拦截
        if(StringUtils.isNotEmpty(requestURI) && requestURI.contains("PCRepairs/;jsessionid")){
            response.sendRedirect("http://10.10.16.172:8080/csos/f/PCRepairs/");
        }else if(StringUtils.isNotEmpty(requestURI) && requestURI.contains("getRedict;jsessionid")){
            response.sendRedirect(String.format("%s","http://10.10.16.172:9533/#/search"));
        }else{
            filterChain.doFilter(servletRequest,servletResponse);
        }

    }

    @Override
    public void destroy() {

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值