私たちの生活では、アカウントに対する自動ログインがすでに非常に一般的であるため、フィルターを使用してこの機能を実装しています。
主に、ユーザーの自動ログインとキャンセルされた自動ログインを導入し、1日またはN日で自動ログインの実現を実現します。ユーザーのIPがブラックリストに追加された後、フィルターを直接使用して警告ページに戻ります。
フィルターの機能は非常に強力です。この機能を実現するには、書面によるフロントエンドバックエンドの後にサーブレットを追加するだけです。
PS:これは単なるデモです。主に自動ログイン関数の実現に焦点を当てて、アクセスデータベースの部分を自分でシミュレートしました。
フロントデスクコード:
前景コードが成功しているかどうかは、このページに表示されます。使用される手法:JSTLタグのアプリケーション、セッションの読み取り値
<%@ページ言語= "java" import = "java.util。*" pageencoding = "utf-8"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/core"プレフィックス= "c"%> < <html> <head> </head> <body> <c:test = "$ {!empty sessionscope.error}">パスワードまたはユーザー名が間違っています。 <! - 表示後、内部の値を削除する必要があります - > <c:var = "エラー" scope "/> </c:if> <c:if> <c:if test =" $ {empty sessionscope.user} "var =" boo "> <h2>これは、ログインのページです</h2> <formアクション=" type = "text" name = "name" /> <br/> pwd:<入力タイプ= "テキスト" name = "pwd" /> <br/> <入力タイプ= "ラジオ" name = "time" value = "0" /> <br/> 1日:<入力タイプ= "ラジオname" time = "time" 1 " /> <br/> <入力タイプ= "送信" value = "submit"/>> </form> </c:if> <c:if> <c: "$ {!boo}"> welcome、$ {sessionscope.user}、<a href = "">モジュール1 </a> <a href = ">モジュール2 =">モジュール1 </a> value = '/cancelautologin' //> "> cancelautologin </a> </c:if> </body> </html>サーブレットの実装コード:
前のコードと同様に、それはフロントデスクとの対話のみを担当しています:ITで使用されるテクノロジーにはURLエンコーディングが含まれ、値はCookieにあり、セッションはページにあり、ページはジャンプします(転送)
public void dopost(httpservletrequest request、httpservletResponse応答)ServleTexception、ioException {string name = request.getParameter( "name");文字列pwd = request.getParameter( "pwd"); string time = request.getParameter( "time"); if(name!= null && pwd!= null && name.equals(pwd)){//好きなようにここに書く必要があります - > daoは後でデータベースにアクセスする必要があります//ログインが成功したと仮定して、session request.getsession()。 //中国語と互換性がある場合、name = urlencoder.encode(name、 "utf-8")をエンコードする必要があります。 pwd = urlencoder.encode(pwd、 "utf-8"); Cookie C = new Cookie( "autologin"、name+"、"+pwd); //この値はこの方法では使用できません。セキュリティ上の考慮事項については、暗号化または二次暗号化を使用することを知っておく必要があります。 C.SetMaxage(_Time); Response.AddCookie(c); Response.sendredirect(request.getContextPath()+"/index.jsp"); //フィルターのデフォルト設定はリダイレクトを傍受するためであり、転送は直接的な内部転送です。ただし、フィルターは簡単に対処できませんが、web.xmlで構成するだけです。 } else {request.getSession()。setAttribute( "error"、 "1"); Response.sendredirect(request.getContextPath()+"/index.jsp"); }}今まで、私はテクノロジーがないと感じています。以前のコードと同じコードがフィルターの関数になりました。
安全なログイン:
プロジェクトに入った後にログインせずにユーザーがログインするのを防ぐために、以前に安全にログインするために動的インポートを使用しました。プロジェクトに参加して、自由にインターフェイスを入力できます。動的インポートはこの機能を達成できますが、フィルターを使用する方が良いです。
一般に、dofilter()はフィルターに記述されています。セッションコンテナがnullであるかどうかを判断する必要があります。これは、これがログインされていないことを意味します。ログインインターフェイスに戻るだけです。それ以外の場合は、手放します
コードが表示されます:
public void dofilter(servletRequest request、servletResponse応答、フィルターチェーンチェーン)IoException、servletexception {httpservletrequest req =(httpservletrequest)request; httpservletResponse resp =(httpservletResponse)応答; string session =(string)req.getsession()。getattribute( "user"); if(session == null){system.out.println( "Abnormal login"); resp.sendredirect(req.getContextPath()+"/index.jsp"); } else {system.out.println( "成功ログイン"); Chain.dofilter(req、rep); }}キャラクターエンコーディング:
キャラクターエンコーディングの問題。過去には、毎回サーブレットのdopost()に手動で入力する必要がありました。すべてのサーブレットには入力が必要であり、これは面倒すぎるため、フィルターを使用して実装します。
コードが表示されます:
<span style = "font-size:18px;"> public void dofilter(servletrequest request、servletresponse response、filterchainチェーン)はioexception、serchletexcepting(文字); Chain.dofilter(リクエスト、応答); } @Override public void init(filterconfig config)throws servletexception {character = config.getInitParameter( "character"); // a </a </a </span style = "font-size:18px; font-family:arial、helvetica、sans-serif; } </span>上記の文字はグローバル変数として定義され、初期値はweb.xmlで構成されています。
web.xmlコードが表示されます。
<filter> <filter-name> charatele </filter-name> <filter-class> cn.hncu.filter.characterfilter </filter-class> <init-name> charatele </param-name> <param-value> utf-8 </param-value> </init-param> </filter>
自動ログイン:
主なアイデア:自動ログインでは、セッションに値があることを決定する必要があります。ある場合は、ログインした後、noがある場合は、ローカルCookieにアクセスしてそれを見つけ、存在し、データベースを一致させます。試合が成功した場合は、セッションコンテナを追加します。
コードが表示されます:
public void dofilter(servletrequest request、servletresponse応答、フィルターチェーンチェーン)は、ioexception、servletexception {//自動的にログインすると、セッションに値があることを設定する必要があります。ある場合は、ログインしていない場合は、Cookie内のデータにアクセスする必要があります。 Cookieのデータ//データベースと一致するかどうか?はい、セッションの値をここで設定します。いいえ、httpservletrequest req =(httpservletrequest)リクエストをreq。 httpservletResponse resp =(httpservletResponse)応答; string session =(string)req.getsession()。getattribute( "user"); if(session == null){//現在cs [] = req.getCookies(); if(cs!= null){for(cookie c:cs){if(c.getname()。equals( "autologin")){string value = c.getValue(); //これは暗号化されていますが、Commasに接続します。 string [] strs = value.split( "、"); // logserlvetで、最初にエンコードを使用し、次にコンマ接続を使用します。文字列name = urldecoder.decode(strs [0]、 "utf-8")を逆転させる必要があります。 string pwd = urldecoder.decode(strs [1]、 "utf-8"); // name、pwdデータを背景に取得してデータベースにアクセスするには、(name.equals(pwd)){req.getsession()。setAttribute( "user"、name); //セッションでパラメーターを設定するif(req.getsession()。 }}}}} chain.dofilter(req、resp); //手放す必要があります。 。 }ブラックリストに登録されたユーザー
ログインではなくブラックリストに登録されたユーザーは、結果を伝えてください
コードが表示されます:
public void dofilter(servletRequest request、servletResponse応答、フィルターチェーンチェーン)IoException、servletexception {httpservletrequest req =(httpservletrequest)request; httpservletResponse resp =(httpservletResponse)応答; string ip = req.getRemoteadDr(); //アクセスIPを取得します。 System.out.println(ip+"iipp"); if(set.contains(ip)){//ブラックリストSystem.out.println( "set"); resp.getWriter()。print( "あなたはブラックリストにあります。 // indexはサーバーから要求するときに直接傍受するため、返品は不可能です} else {chain.dofilter(req、resp); }}ブラックリストによって返されるタイプが最適です。ここで手動で追加しました。私はもともと、ツールクラスを作成してデータベースから読む必要があります。チェックするだけでなく、ブラックリストを追加、削除、変更することもできます。
コードが表示されます:
ハッシュセットはグローバル変数として定義され、セットが含まれています。これは非常に効率的です。
public void init(filterconfig arg0)は、servletexceptionをスローします{//ここにデータベースから取得されたブラックリストリストがあります。これは、単純なシミュレーションセットです。Add( "192.132.0.12"); //これは、バックグラウンドデータベースから取得される黒いIPです。 set.add( "localhost"); set.add( "192.132.32.4"); set.add( "127.0.0.1"); }自動ログインをキャンセルします
自動ログインが常に安全でないと見なされる場合、自動ログインがないことを設定します
前に、自動ログインはCookieに保存されているテクノロジーに依存していることを知っていたので、ここではCookieを削除するだけでいいです。
自動ログインのキャンセルはハイパーリンクであるため、サーブレットとして書かれています。
コードが表示されます:
public void dopost(httpservletrequest req、httpservletresponse rep)servletexception、ioexception {cookie cc = new cookie( "autologin"、 ""); cc.setmaxage(0); cc.setpath(req.getContextPath()); Resp.AddCookie(CC); resp.sendredirect(req.getContextPath()+"/index.jsp"); }上記は、これらの短い回答関数を実現できます。
上記は、編集者がフィルターを使用してJavaeeに紹介した関連知識の詳細な説明であり、自動ログインと安全なログインを実現して自動ログインをキャンセルします。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は、すべての人に時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!