ホームページ 类库下载 java类库 Javaフィルターにサービスを挿入する方法

Javaフィルターにサービスを挿入する方法

Nov 26, 2016 am 09:10 AM
filter

プロジェクトで問題が発生しました。フィルターへのサービスの注入が失敗し、注入されたサービスは常に null でした。以下に示すように:

public class WeiXinFilterimplements Filter{
@Autowired
private UsersService usersService;

public void doFilter(ServletRequest request, ServletResponse response, FilterChainchain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request ;
HttpServletResponse resp = (HttpServletResponse)response;
Users users = this.usersService.queryByOpenid(openid);
}

上記の usersService は null ポインタ例外を報告します。

解決策 1:

public void doFilter(ServletRequest request, ServletResponse response, FilterChainchain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponce resp = (HttpServletResponse)応答; ServletContext sc = 要求.getSession().getServletContext(); = null && usersService == null)
UsersService = (Usersservice) CXT.GetBean ("Usersservice");

ユーザー users = this.usersservice.querybyopenid (openid);

方法 2:

public class WeiXinFilter は Filter{

private UsersService usersService;

public void init(FilterConfig fConfig) throws ServletException {

ServletContext sc = fConfig.getServletContext( );

XmlWebApplicationContext cxt = ( XmlWebApplicationContext)WebApplicationContextUtils。 getWebApplicationContext(sc); )


関連原則:

1. ServletContext の取得方法:

1) javax.servlet.Filter で直接取得します。
ServletContext context = config.getServletContext(); HttpServlet で直接取得します
this.getServletContext( )

3) 他のメソッドで、

request.getSession().getServletContext();

2. WebApplicationContext と ServletContext を取得します (http://blessht.iteye. com/blog/2121845) HttpServletRequest 経由:

Spring の ContextLoaderListener は、ServletContextListener インターフェイスを実装するリスナーです。プロジェクトの開始時に、contextInitialized メソッドがトリガーされます (このメソッドは主に、プロジェクトの開始時に ApplicationContext オブジェクトの作成を完了します)。閉じられると、contextDestroyed メソッドがトリガーされます (このメソッドは ApplicationContext のクリーンアップ操作を実行します)。

ConextLoaderListenerによるSpringコンテキストの読み込み処理

①プロジェクトの開始時にcontextInitializedメソッドがトリガーされます。このメソッドは、親クラスcontextLoaderのinitWebApplicationContextメソッドを通じてSpringコンテキストオブジェクトを作成することを1つ行います。

② initWebApplicationContext メソッドは 3 つのことを行います: WebApplicationContext を作成し、対応する Spring ファイルをロードして内部に Bean インスタンスを作成し、WebApplicationContext を ServletContext (Java Web のグローバル変数) に置きます。

③createWebApplicationContext はコンテキスト オブジェクトを作成し、ユーザー定義のコンテキスト オブジェクトをサポートしますが、これらは ConfigurableWebApplicationContext から継承する必要があり、Spring MVC はデフォルトで ConfigurableWebApplicationContext を ApplicationContext (単なるインターフェイス) の実装として使用します。

④configureAndRefreshWebApplicationContext メソッドは、ApplicationContext データをカプセル化し、関連するすべての Bean オブジェクトを初期化するために使用されます。これは、Spring XML データ ソース設定である web.xml から contextConfigLocation という名前の設定を読み取り、それを ApplicationContext に入れ、最後に伝説的な更新メソッドを呼び出して、すべての Java オブジェクトの作成を実行します。

⑤ ApplicationContext を作成したら、それを ServletContext に配置し、格納されているキー値の定数に注意してください。

方法 3:

Spring MVC で HandlerInterceptor または HandlerInterceptorAdapter を直接使用して Filter:

を置き換えます

public class WeiXinInterceptor は HandlerInterceptor {
@Autowired private UsersService usersService; を実装します。  

@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // TODO 自動生成メソッドスタブ
return false;
}

@Override public void postHandle(HttpServletRequest リクエスト、HttpServletResponse レスポンス、オブジェクト ハンドラー, ModelAndView modelAndView) throws Exception { // TODO 自動生成メソッド スタブ
}

@Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws ion { // TODO 自動生成メソッドスタブ
}
}

構成拦截路径:


/>

   


フィルター中注入サービスの例:

public class WeiXinFilter は Filter{
private UsersService usersService; を実装します。    
public void init(FilterConfig fConfig) throws ServletException {} public WeiXinFilter() {} public void destroy() {} public void doFilter(ServletRequest request, ServletResponse response, FilterChainchain) throws IOException, ServletException {
HttpServletRequest req = (H ttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse)response;

String userAgent = req.getHeader("user-agent");        if(useragent!= null && useragent.tolowercase()。indexof( "micromessenger")!= -1){// toString();
String queryString = req.getQueryString();
if(queryString != null){ if(requestURL.indexOf("mtzs.html") !=-1 && queryString.indexOf("LLFlag")!=-1){
req.getSession() .setAttribute(" LLFlag", "1");
chain.doFilter(リクエスト, レスポンス);                    return;
}
}

String openidDES = CookieUtil.getValueByName("openid", req);
String openid = null;            if(StringUtils.isNotBlank(openidDES)){ 試してみてください {
openid = DesUtil.decrypt(openidDES, "rxxxxxxxxxde");    // 解密获得openid
} catch (Exception e) {
e.printStackTrace();
}
}
// ... ...
String[] pathArray = {"/weixin/enterAppFromWeiXin.json", " /weixin/getWeiXinUserInfo.json", "/weixin/getAccessTokenAndOpenid.json", "/sendRegCode.json", "/register.json",
「/login.json」、「/logon.json」、「/dump. json", "/queryInfo.json"};
List pathList = Arrays.asList(pathArray);            
String loginSuccessUrl = req.getParameter("path");
String fullLoginSuccessUrl = "http://www.axxxxxxx.cn/pc/";            if(requestURL.indexOf("weixin_gate.html") != -1){
req.getSession().setAttribute("loginSuccessUrl", loginSuccessUrl);
// ... ...
}
ServletContext sc = req .getSession().getServletContext();
XmlWebApplicationContext cxt = (XmlWebApplicationContext)WebApplicationContextUtils.getWebApplicationContext(sc);

if(cxt != null && cxt.getBean("usersService") != null && usersService == null)
usersService = (UsersService) cxt.getBean("usersService");

ユーザー users = this.usersService.queryByOpenid(openid);
// ... ... if(pathList.contains(servletPath)){ / /パスリスト中的访问路直通
chain.doFilter(リクエスト、レスポンス); String llFlag = (String) req.getSession() .getAttribute("LLFlag"); if(llFlag ! = null && llFlag.equals("1")){戻る;
。 .// 3. Tencent ServerからWeChatのOpenIDを取得します。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

「[Vue 警告]: フィルターを解決できませんでした」エラーを解決する方法 「[Vue 警告]: フィルターを解決できませんでした」エラーを解決する方法 Aug 19, 2023 pm 03:33 PM

「[Vuewarn]:Failedtoresolvefilter」エラーを解決する方法 Vue を使用した開発プロセス中に、「[Vuewarn]:Failedtoresolvefilter」というエラー メッセージが表示されることがあります。このエラー メッセージは通常、テンプレートで未定義のフィルターを使用したときに発生します。この記事では、このエラーを解決する方法を説明し、対応するコード例を示します。 Vue を使用しているとき

Springbootにおけるフィルタの原理と登録方法は何ですか Springbootにおけるフィルタの原理と登録方法は何ですか May 11, 2023 pm 08:28 PM

1. フィルター まず、Web サーバーのフィルターの場所を確認します。フィルタは前後につながったチェーンであり、前の処理が完了すると次のフィルタに渡されて処理が行われます。 1.1フィルター インターフェイス定義 publicinterfaceFilter{//初期化メソッド。ライフサイクル全体で 1 回だけ実行されます。 //initメソッドが正常に実行されるまで(例外スローなどの失敗)、フィルタリングサービスは提供できません。 // パラメータ FilterConfig は、初期化パラメータを取得するために使用されます publicvoidinit(FilterConfigfilterConfig)throwsServletException;//

SpringBoot2にフィルターを統合する方法 SpringBoot2にフィルターを統合する方法 May 16, 2023 pm 02:46 PM

まず、統合アクセス URL インターセプト用のフィルターを定義します。コードは次のとおりです: publicclassUrlFilterimplementsFilter{privateLoggerlog=LoggerFactory.getLogger(UrlFilter.class);@OverridepublicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{H

CSS のぼかしプロパティの詳細な説明: filter および backdrop-filter CSS のぼかしプロパティの詳細な説明: filter および backdrop-filter Oct 20, 2023 pm 04:48 PM

CSS ファジー プロパティの詳細な説明: filter および background-filter はじめに: Web ページをデザインするとき、ページの視覚的な魅力を高めるためにいくつかの特殊効果が必要になることがよくあります。ブラー効果は一般的な特殊効果の 1 つです。 CSS には、filter と background-filter という 2 つのぼかし属性が用意されており、それぞれ要素のコンテンツと背景のコンテンツをぼかすために使用されます。この記事では、これら 2 つのプロパティについて詳しく説明し、具体的なコード例をいくつか示します。 1.フィルター

Javaでフィルタリングする方法 Javaでフィルタリングする方法 Apr 18, 2023 pm 11:04 PM

注 1. Lambda パラメータが true 値を生成する場合、フィルター (ブール値の結果を生成できる Lambda) は要素を生成します; 2. false が生成されると、この要素は使用されなくなります。リスト コレクションを作成する例: ListstringCollection=newArrayList();stringCollection.add("ddd2");stringCollection.add("aaa2");stringCollection.add("bbb1");stringC

CSS 視覚プロパティ分析: ボックスシャドウ、テキストシャドウ、フィルター CSS 視覚プロパティ分析: ボックスシャドウ、テキストシャドウ、フィルター Oct 20, 2023 pm 12:51 PM

CSS 視覚プロパティの分析: box-shadow、text-shadow、filter はじめに: Web デザインおよび開発では、CSS を使用して要素にさまざまな視覚効果を追加できます。この記事では、CSS の box-shadow、text-shadow、filter の 3 つの重要なプロパティに焦点を当て、その使用法や効果の表示も含めて説明します。以下では、これら 3 つのプロパティを詳細に分析します。 1.box-shadow (ボックスシャドウ) box-shado

Java 8 のオプション クラス: filter() メソッドを使用して null の可能性のある値をフィルタリングする方法 Java 8 のオプション クラス: filter() メソッドを使用して null の可能性のある値をフィルタリングする方法 Aug 01, 2023 pm 05:27 PM

Java8 のオプション クラス: filter() メソッドを使用して null の可能性のある値をフィルタリングする方法 Java8 では、Optional クラスは、null の可能性のある値をより適切に処理し、NullPointerException の発生を回避できる非常に便利なツールです。 Optional クラスには、潜在的な null 値を操作するためのメソッドが多数用意されています。重要なメソッドの 1 つは filter() です。 filter() メソッドの機能は、オプションが

Vue でフィルターを使用してデータをフォーマットおよび処理する方法 Vue でフィルターを使用してデータをフォーマットおよび処理する方法 Oct 15, 2023 pm 03:50 PM

Vue でフィルターを使用してデータをフォーマットおよび処理する Vue では、フィルターを使用してデータをフォーマットおよび処理できます。 Filter はテンプレート内で直接呼び出すことができる関数で、表示するデータを処理し、処理結果を返すことができます。この記事では、フィルターを使用してデータをフォーマットおよび処理する方法を紹介し、具体的なコード例を示します。フィルターの登録 Vue インスタンスでは、モデルで使用できるように最初にフィルターを登録する必要があります。

See all articles