يدرس هذه المقالة بشكل أساسي الاستخدام ذي الصلة لمرشحات المرشحات في Java ، ورمز التنفيذ المحدد كما يلي.
يستخدم مرشح المرشح بشكل أساسي لتمرير البيانات إلى الواجهة الخلفية. المستوى بسيط للغاية ، لذلك سأقدم فقط بعض الرموز التي تمت كتابتها:
1. المرشحات التي تجعل المتصفح لا صفحات ذاكرة التخزين المؤقت
استيراد javax.servlet.*؛ استيراد javax.servlet.http.httpservletresponse ؛ استيراد java.io.ioException ؛/***مرشح يستخدم لجعل المتصفح لا صفحات ذاكرة التخزين المؤقت*/servletresponse filter. ioException ، servleTexception {(httpservletresponse). ((httpservletresponse) استجابة) .Setheader ("pragma" ، "no-cache") ؛ ((httpservletresponse) استجابة) .SetDateHeader ("انتهاء الصلاحية" ، -1) ؛ filterchain.dofilter (طلب ، استجابة) ؛ } public void Destroy () {} public void init (filterConfig filterConfig) يلقي ServleTexception {}}2. المرشحات لاكتشاف ما إذا كان المستخدم مسجلاً
تنفيذ الفئة العامة checkloginfilter filter {FilterConfig FilterConfig = null ؛ سلسلة خاصة redirecturl = null ؛ قائمة خاصة notcheckurllist = new ArrayList () ؛ SessionKey الخاص بالسلسلة الخاصة = NULL ؛ dofilter public void (servletrequest servletrequest ، servletResponse servletResponse ، filterchain filterchain) يلقي ioException ، servletexception {httpservletrequest request = (httpservletrequest) servletrequest ؛ httpservletresponse استجابة = (httpservletresponse) servletResponse ؛ جلسة httpsession = request.getSession () ؛ if (sessionKey == null) {filterchain.dofilter (request ، response) ؛ يعود؛ } if ((! checkRequestUriintNotfilterList (request)) && session.getAttribute (sessionKey) == null) {response.sendRedirect (request.getContextPath () + redirecturl) ؛ يعود؛ } filterchain.dofilter (servletRequest ، servletResponse) ؛ } public void dorder () {notcheckurllist.clear () ؛ } private boolean checkRequesturiitNotfilterList (httpservletrequest request) {string uri = request.getServletPath () + (request.getPathinFo () == null؟ ": request.getPathinFo ()) ؛ إرجاع notcheckurllist.contains (uri) ؛ } public void init (filterConfig filterConfig) يلقي servleTexception {this.filterConfig = filterConfig ؛ redirecturl = filterConfig.getInitParameter ("redirecturl") ؛ SessionKey = filterConfig.getInitParameter ("checksessionKey") ؛ سلسلة notcheckurlliststr = filterConfig.getInitParameter ("notcheckurllist") ؛ if (notcheckurlliststr! = null) {StringTokenizer st = new StringTokenizer (notcheckurlliststr ، "؛") ؛ notcheckurllist.clear () ؛ بينما (st.hasmoretokens ()) {notcheckurllist.add (st.nextToken ()) ؛ }}}}}}3. مرشح ترميز الأحرف
استيراد javax.servlet.*؛ استيراد java.io.ioException ؛/***مرشح يستخدم لتعيين تشفير حرف طلب http ، حدد أي حرف ترميز يستخدم لاستخدامه من خلال ترميز معلمة الترشيح ، والذي يتم استخدامه للتعامل مع المشكلات الصينية من request form request*/public class charactering distriments filter {protected filter. "" ؛ public void dofilter (servletrequest servletrequest ، servletResponse servletResponse ، filterchain filterchain) يلقي iOexception ، servletexception {if (الترميز! = null) servletrequest.setcharencdering (الترميز) ؛ filterchain.dofilter {filterConfig = null ؛ envoding = null ؛} public void init (filterConfig filterConfig) يلقي servleTexception {this.filterConfig = filterConfig ؛ this.encoding = filterConfig.getInitParameter ("الترميز") ؛}}4. سجل مشغل وصول المستخدم
package com.qwserv.itm.pfl.log.svr ؛ import java.io.ioException ؛ import javax.servlet javax.servlet.servletResponse ؛ استيراد java.text.simpleDateFormat ؛ استيراد javax.servlet.http.httpservletrequest ؛ import com.qwserv.itm.api.pfl.sm.vo.person com.qwserv.itm.util.toolkit.debugutil ؛ الطبقة العامة Observefilter تنفذ filter {محمية debugutil log = debugutil.getInstances ("pfl-log" ، servelter.class) ؛ IoException ، ServleTexception {// سجل عمليات الوصول إلى المستخدم httpservletrequest request1 = (httpservletrequest) طلب ؛ stringbuffer url = request1.getRequesturl () SimpleDateFormat ("Yyyy-MM-DD HH: MM: SS"). التنسيق (new java.util.date ()) ؛ string hostip = request.getRemoteAddr () ؛ string sessionId = request1.getRequestessionSessionId () ؛ string userid = "" person.getuser (). filterchain.dofilter (طلب ، استجابة) ؛} باطل public init (FilterConfig filterConfig) يلقي servletexception {} public boolean judgefile (string url) {if (uc (". url.endswith (". BMP") || إلى اتصال قاعدة البيانات conn = null ؛ state st = null ؛ حاول {// إنشاء تعبير SQL وإدراج البيانات في قاعدة البيانات conn = serviceaccess.getsystemsupportService (). log_observe_history (userId ، url ، التفاصيل ، SessionId ، اسم المضيف ، startDate) قيم ('" + userId +" ، " + url +" ، " + desc +" ، " + sessionid +" ، "" + hostip + "،" " + operatortime +" ")" ؛ (ServiceAccess.getSystemSupportService (). القيم (log_observe_seq.nextval ، " + userid +" ، " + url +" ، " + desc +" ، " + sessionId +" ، " + hostip +" '، to_date (' " + operatime +" '،' yyyy-mm-dd hh24: mi: ss ')) "؛ (استثناء ه) ~ {try {st.close () ؛} catch (استثناء e) {eprintstacktrace () ؛} st = null ؛} if (conn! = null) {try {conn.close () ؛<Ivilter> <ilter-name> ObserveFilter </filter-name> <ilter-class> com.qwserv.itm.pfl.log.svr.observefilter </filter-class> </filter> <-filter-mapping> <filter-name> robervefilter </filter-name> <URLITER>
5. يمنع Filter المستخدمين من الوصول إلى بعض الموارد غير المصرح بها
package com.drp.util.filter ؛ استيراد java.io.ioException ؛ استيراد javax.servlet.filter ؛ استيراد javax.servlet.filterchain ؛ استيراد javax.servlet.filterConfig ؛ import javax.servlet.servletexception ؛ javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ استيراد javax.servlet.http.httpsession ServletResponse ، filterchain filterchain) يلقي ioException ، servlexception {// 1 ، المعلمة الأولى لطريقة dofilter هي كائن servletrequest. يوفر هذا الكائن للمرشح الوصول الكامل إلى المعلومات الواردة ، بما في ذلك بيانات النماذج وملفات تعريف الارتباط ورؤوس طلب HTTP. المعلمة الثانية هي servletResponse ، والتي عادة ما يتم تجاهلها في المرشحات البسيطة. المعلمة الأخيرة هي Filterchain ، والتي يتم استخدامها لاستدعاء صفحة Servlet أو JSP. httpservletrequest طلب = (httpservletrequest) servletRequest ؛ // ؛ // إذا قمت بمعالجة طلبات HTTP وتحتاج إلى الوصول إلى طرق مثل getheader أو getCookoies التي لا يمكن الحصول عليها في servletRequest ، يجب عليك بناء كائن الطلب كـ httpservletrequest httpservonse = String Currenturl = request.getRequesturi () ؛ // احصل على المسار المطلق المقابل لدليل الجذر: string targeturl = currenturl.substring (currenturl.indexof ("/" ، 1) ، currenturl.length ()) ؛ if (! "/login.jsp" .equals (targeturl)) {// ادعى ما إذا كانت الصفحة الحالية عبارة عن صفحة تسجيل الدخول بعد إعادة التوجيه. إذا كان الأمر كذلك ، فلا تصدر حكم الجلسة لمنع حلقة ميتة إذا (الجلسة == null || session.getAttribute ("user") == null) {//*بعد تسجيل الدخول إلى المستخدم ، تحتاج إلى إضافة Session System.Out.Println يدويًا ("request.getContextPath () = "/login.jsp") ؛//F الجلسة فارغة ، فهذا يعني أن المستخدم لم يتم تسجيل الدخول ، وإعادة توجيه إلى login.jsp return ؛}} // انضم إلى سلسلة التصفية ومتابعة تنفيذ filterchain.dofilter (طلب ، استجابة) ؛ //. استدعاء طريقة dofilter لكائن filterchain. تأخذ طريقة dofilter لواجهة المرشح كائن filterchain كمعلمة له. عند استدعاء طريقة dofilter لهذا الكائن ، يتم تنشيط المرشح التالي ذي الصلة. إذا لم يرتبط مرشح آخر بصفحة Servlet أو JSP ، يتم تنشيط صفحة Servlet أو JSP. } void public init (FilterConfig filterConfig) يلقي servletexception {}}HTML
<Ivilter> <lipter-name> authFilter </filter-name> <lipter-class> com.drp.util.filter.authfilter </filter-class> </filter> <lipter-mapping> <filter-name> authfilter </filter-name> <Url-pittern>*.
لخص
ما سبق هو مثال رمز كامل لهذه المقالة حول استخدام المرشح في Java. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!