A. java中如何,拦截一个网站返回的页面
返回的不是页面,是数据
1,请求过去,依照http协议,第三方网站会给你返回消息
2,你所需要的是解析消息
3,你肯定知道你想要的是那一部分,假如股票,你肯定知道那个div的id
或者股票的代码或者其他,通过分析http响应的结果,你就知道哪一部分数据时你想要的
4,http协议,不过就是字符串,尤其是你获得的那部分信息希望不是其他的数据类型,假设是可以看懂的文本,你利用StringBuffered存储这个String
5,这样你就可以解析你自己程序中的字符串了(over)
6,ps,如果你想要保留格式,很简单,只需要将解析的string 保留html元素,然后直接输出到你的页面上就ok了
再提示你一点:
1,如果你正常在浏览器上第三方的网站,点一个按钮,消息返回给那个浏览器
2,如果你用自己的程序访问,那消息就返回给你的程序!
这样再不明白,我死不瞑目了 = =!分给我啊
B. java有什么注解前置前拦截
本文将用简洁的代码构建一个springboot的拦截器。拦截器的使用很简单,定义一个自己的拦截器,向配置中添加一下就可以使用。为了方便,之后又引入了注解。
目录和概述
概述
假设需求:访问项目的controller是都要进行"token验证",除了某些像登录之类的方法。
项目结构:
TokenInterceptor.java 自定义拦截器
InterceptorConfig.java 添加拦截器进入项目
NoNeedToken.java 自定义注解
TestController.java 测试接口
1、自定义拦截器
在 TokenInterceptor.java 中输入以下代码,以下的代码将生成一个在请求到达controller前进行拦截的拦截器
import com.alibaba.fastjson.JSONObject;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.List;
@Component
public class TokenInterceptor implements HandlerInterceptor {undefined
// 假设现在的token有如下数据
List tokenList = Arrays.asList("111", "222", "333");
// 这个方法是在访问接口之前执行的,我们只需要在这里写验证登陆状态的业务逻辑,就可以在用户调用指定接口之前验证登陆状态了
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {undefined
// 设置返回为json格式,使用UTF-8
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
String token = request.getHeader("token");
PrintWriter out;
// 之后写你的判断逻辑:return true是通过拦截器,可以继续访问controller,return false是不通过
if (token == null || !tokenList.contains(token)) {undefined
// 如果失败了返回{state:"false", msg:"token is null or wrong"}
JSONObject res = new JSONObject();
res.put("state","false");
res.put("msg","token is null or wrong");
out = response.getWriter();
out.append(res.toString());
return false;
}
// 否则返回true 进入controller
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {undefined
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {undefined
}
}
————————————————
版权声明:本文为CSDN博主“魔王别嚣张”的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_36481714/article/details/114888055
C. java中如何用过滤器来拦截用户不允许访问的
编写 过滤器 拦截请求,在过滤器中判断请求的路径,如果请求是可以访问的 那就放行,如果需要验证用户的 那就 获取session,判断用户情况,是否登录 ,是否拥有权限这些,通过就放行,反之跳转到报错页面 或者登录页面
D. Java实现拦截HTTP请求的几种方式
在Java的服务端开发当中,拦截器是很常见的业务场景,这里对Java开发当中几种常见的拦截器的实现方式进行记录和分析。案例说明基于Spring Boot环境。
一:实现javax.servlet.Filter接口(使用过滤器方式拦截请求)
import org.springframework.stereotype.Component;import javax.servlet.*;import java.io.IOException;import java.util.Date;@Componentpublic class TimeInterceptor implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("time filter init");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("time filter start");long start = new Date().getTime();filterChain.doFilter(servletRequest, servletResponse);System.out.println("time filter 耗时:"+(new Date().getTime()-start));System.out.println("time filter finish");}@Overridepublic void destroy() {System.out.println("time filter destroy");}}
如使用@Compent注解声明不需要加入其它配置即可使得拦截器生效,但是默认拦截/*,会拦截所有请求。
二:使用@Bean注入自定义拦截器,依然上面的代码,去掉@Compent注解,创建TimeWebConfig配置类:
import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import java.util.ArrayList;import java.util.List;@Configurationpublic class TimeWebConfig {@Beanpublic FilterRegistrationBean timeFilter(){FilterRegistrationBean registrationBean = new FilterRegistrationBean();TimeInterceptor interceptor = new TimeInterceptor();registrationBean.setFilter(interceptor);List<String> urls = new ArrayList<>();urls.add("/user/*");registrationBean.setUrlPatterns(urls);return registrationBean;}}
上面这两种拦截请求的实现是基于JavaEE提供的Filter接口实现的,缺点在于,该拦截器实际上是一个过滤器,执行代码的方法doFilter只提供了request,response等参数,当请求进入被过滤器拦截的时候,我们并不知道这个请求是由哪个控制器的哪个方法来执行的。
三:使用springMVC提供的拦截器,实现org.springframework.web.servlet.HandlerInterceptor接口:
创建自定义的拦截器:
import org.springframework.stereotype.Component;import org.springframework.web.method.HandlerMethod;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.util.Date;@Componentpublic class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler) throws Exception {System.out.println("preHandler");System.out.println(((HandlerMethod) handler).getBean().getClass().getName());System.out.println(((HandlerMethod) handler).getMethod().getName());httpServletRequest.setAttribute("start", new Date().getTime());return true;}@Overridepublic void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {System.out.println("postHandler");Long start = (Long) httpServletRequest.getAttribute("start");System.out.println("time interceptor 耗时:"+(new Date().getTime()-start));}@Overridepublic void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {System.out.println("afterCompletion");Long start = (Long) httpServletRequest.getAttribute("start");System.out.println("time interceptor 耗时:"+(new Date().getTime()-start));System.out.println("ex is:"+e);}}
创建配置类:
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;@Configurationpublic class WebConfig extends WebMvcConfigurerAdapter {@Autowiredprivate MyInterceptor interceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(interceptor).addPathPatterns("/user/*").excludePathPatterns("/blog/*");}}
此种方式的拦截器当中我们能够获取拦截的请求对应的类和方法的相关信息,缺点在于该handler对象无法获取具体执行方法的参数信息。
四:利用Spring的切面(AOP)实现拦截器:
引入jar包:
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>
创建切片类:
import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.springframework.stereotype.Component;import java.util.Date;@Aspect@Componentpublic class TimeAspect {@Around("execution(* com.qinker.controller.UserController.*(..))")public Object handlerControllerMethod(ProceedingJoinPoint point) throws Throwable {System.out.println("time aspect start");long start = new Date().getTime();Object[] args = point.getArgs();for (Object obj : args) {System.out.println("arg is:"+obj);}Object obj = point.proceed();//具体方法的返回值System.out.println("aspect 耗时:"+(new Date().getTime()-start));System.out.println("time aspect end");return obj;}}
aspectj基于AOP实现的拦截器功能十分强大,具体详解请参考spring官网网站的文档。
E. java怎么实现对某些需要登录才能查看的页面进行拦截不需要登录的jsp页面不需要拦截!请高手赐教!
如果是简单的页面权限控制,采用过滤器完全就可以实现了。 实现思路:
1. 设计需要权限访问的页面存放在指定的目录,如: /A/xxx.JSP 。 不需要登录访问的页面则不存放在A目录下
2. 自己写个过滤器, 过滤器拦截的URL为 /A/* (url-mapping的配置); 过滤器的逻辑是,只有登录的请求,才forward请求的页面,没有登录的请求则跳转到登陆页面
如果是复杂的权限控制,可以考虑采用spring security 组件来实现,从而节省开发时间
F. java如何对方法进行拦截呢
如果使用asm需要知道
System.out.println("hello world");
return;
的字节码是
getstatic System.out
ldc #? // 从常量池取"hello world"字符串
invokevirtual java/io/PrintStream.println(Ljava/lang/Object)
return
。
于是乎重写一份方法即可。
。
用javaassist会方便一些。只需要java知识。直接将方法设置为
{{
System.out.println("hello world");
}}
即可
。
字节码类库,特别是javaassist这种简单易懂的,网上资料很多,花5分钟看下就行了。
。
另外,如果是非静态方法也可以试试动态代理,通过接口访问可用自带的Proxy做,否则就用cglib好了。
G. Java怎么实现对IP/TCP协议数据包的拦截
众所周知,JAVA语言虽然在TCP/UDP传输方面给予了良好的定义,但对于网络层以下的控制,却是无能为力的。JPCAP扩展包弥补了这一点。
JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用wincap/libpcap,而给JAVA语言提供一个公共的接口,从而实现了平台无关性。在官方网站上声明,JPCAP支持FreeBSD 3.x, Linux RedHat 6.1, Fedora Core 4, Solaris, and Microsoft Windows 2000/XP等系统。
二.JPCAP机制
JPCAP的整个结构大体上跟wincap/libpcap是很相像的,例如NetworkInterface类对应wincap的typedef struct _ADAPTERADAPTER,getDeviceList()对应pcap_findalldevs()等等。 JPCAP有16个类,下面就其中最重要的4个类做说明。
1.NetworkInterface
该类的每一个实例代表一个网络设备,一般就是网卡。这个类只有一些数据成员,除了继承自java.lang.Object的基本方法以外,没有定义其它方法。
H. java 写一个拦截器,让字符串中所有非字母的文字被拦截,有哪些实现方式
我没明白“拦截”是什么意思,替换成""吗?
如果要将所有非字母字符被替换成"",可以用replaceAll方法。str.replaceAll("\\W","");
I. java 怎么拦截http请求
使用servlet用tomcat(当然其它的容器也可以)部署tomcat会有一个ip地址别人就可以通过访问这个地址来调用你实现的代码了用request传值返回值用response