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