拦截器的设置

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
  // TODO Auto-generated method stub
  String requestURI = request.getRequestURI();
  Object admin = request.getSession().getAttribute("admin");
  if(admin==null)
  {
   //表示未登录或登陆失效
   System.out.println("链接"+requestURI+"进入拦截器!");
   String header = request.getHeader("X-Requested-With");
   //判断是ajax请求
   if("XMLHttpRequest".equals(header))
   {
    //表示是ajax请求
    Map<String, String> ret=new HashMap<String, String>();
    ret.put("type", "error");
    ret.put("msg", "登录会话超时或还未登录,请重新登陆!");
    response.getWriter().write(JSONObject.fromObject(ret).toString());
    return false;   
   }
   //表示是普通链接跳转,直接重定向到登陆页面
   response.sendRedirect(request.getServletContext().getContextPath()+"system/login");
      return false;
  }
  
  return true;
 }
### OkHttp 中通过拦截器设置 HTTP 代理 在 OkHttp 客户端中,虽然可以通过 `OkHttpClient.Builder` 设置全局的代理选项,但有时可能希望更灵活地控制特定请求的代理行为。此时可以利用自定义拦截器来动态调整代理设置。 #### 创建自定义代理拦截器 为了实现这一点,需要编写一个实现了 `Interceptor` 接口的新类,在此过程中可以根据业务需求决定何时应用哪个代理服务器: ```java public class ProxySelectorInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request originalRequest = chain.request(); // 动态选择代理地址 HttpUrl proxyUrl = new HttpUrl.Builder() .scheme("http") // 或 "https" .host("proxy.example.com") .port(8080) .build(); Address address = ((RealCall)chain.call()).route().address(); SocketAddress proxyAddr = new InetSocketAddress(proxyUrl.host(), proxyUrl.port()); Address newAddress = address.newBuilder() .proxy(new Proxy(Type.HTTP, proxyAddr)) .build(); RealCall modifiedCall = (RealCall)((RealCall)chain.call()) .cloneWithNewAddressAndHandler(newAddress, chain.call().eventListener(), chain.call().getCallAsync()); return modifiedCall.getProxies().isEmpty() ? chain.proceed(originalRequest) : modifiedCall.clone(modifiedCall).execute(); } } ``` 需要注意的是上述代码片段中的某些细节并非官方推荐做法,因为直接操作内部组件(如 `RealCall` 和 `Route.Address`)可能会随着版本更新而失效[^1]。因此建议采用更为稳健的方式——即在构建 `OkHttpClient` 实例时指定代理而非尝试修改正在进行中的请求链路。 对于大多数场景来说,应该优先考虑如下方式设定固定的或基于条件变化的代理策略: ```java // 构建带有固定代理配置的 OkHttpClient Proxy httpProxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("your.proxy.server", port)); OkHttpClient client = new OkHttpClient.Builder() .proxy(httpProxy) .build(); ``` 如果确实有理由要在运行期间改变代理,则应重新创建一个新的 `OkHttpClient` 对象并附带所需的代理参数,而不是试图在一个已经存在的请求链条里做改动。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值