Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erläuterung der Verwendung von Filtern zur Implementierung der auf Cookies basierenden Kundenzugangs-Anmeldefunktion

Ausführliche Erläuterung der Verwendung von Filtern zur Implementierung der auf Cookies basierenden Kundenzugangs-Anmeldefunktion

零下一度
零下一度Original
2017-06-15 13:52:091607Durchsuche

In diesem Artikel wird hauptsächlich die Verwendung von Filtern vorgestellt, die auf Cookies basieren, damit sich Kunden nur einmal pro Besuch anmelden können.

Ich glaube, dass jeder auf wichtigen Websites darauf stoßen wird Wenn Sie sich anmelden, wird in der Box eine ähnliche Option angezeigt, bei der Sie sich beim nächsten Mal nicht anmelden müssen bzw. sich einen Monat lang nicht anmelden müssen. Ich werde dies hier aufzeichnen Wenn es einen Fehler im Artikel gibt, können Sie gerne darauf hinweisen, warum

Sich einmal anmelden, da beim Besuch einer bestimmten Seite die automatische Anmeldung fehlschlägt Beim ersten Mal durchlaufen Sie beim nächsten Aktualisieren des Besuchs erneut den automatischen Anmeldevorgang und es entsteht eine Endlosschleife.

Das Codebeispiel-Framework in diesem Artikel ist Spring MVC. Im Folgenden wird erläutert, welche Kenntnisse zur Implementierung dieser Funktion erforderlich sind: Cookies und Filter

1

Was sind Cookies: Cookies stellen eine nützliche Methode für Webanwendungen dar, um benutzerbezogene Informationen zu speichern. Wenn ein Benutzer beispielsweise Ihre Website besucht, können Sie Cookies verwenden, um die Präferenzen oder andere Informationen des Benutzers zu speichern, sodass die Anwendung beim nächsten Besuch des Benutzers auf Ihrer Website die zuvor gespeicherten Informationen abrufen kann.

Sehen wir uns an, wie man Cookies speichert und wie man Cookies löscht

Cookies speichern


String newUserName = null;
try {
  newUserName = URLEncoder.encode(username, "UTF-8");//把用户名转码,防止用户名是中文,cookies保存中文取出会乱码
} catch (UnsupportedEncodingException e) {
  e.printStackTrace();
}
Cookie nameCookie = new Cookie("username", newUserName);
String pwdMd5Cook = MD5Util.MD5(Pwd);
Cookie pwdCookie = new Cookie("pwd", pwdMd5Cook);// 保存加密后的密码
nameCookie.setMaxAge(60 * 60 * 24 * 365);// 用户名保存一年
pwdCookie.setMaxAge(60 * 60 * 24 * 30);// 密码保存30天
// 发送Cookie信息到浏览器
response.addCookie(nameCookie);
response.addCookie(pwdCookie);
Löschen Das Löschen von Cookies ist sehr einfach, es ist jedoch zu beachten, dass das Löschen von Cookies in derselben Kontrollebene wie das Speichern von Cookies erfolgen muss, da die gespeicherten Cookies sonst nicht gefunden werden und nicht gelöscht werden können


Cookie cookie = new Cookie("pwd", null);
cookie.setMaxAge(0);// 删除密码cookie
response.addCookie(cookie);

2.Filter - Filter

Filter wird auch als Filter bezeichnet. Es ist die praktischste Technologie in der Servlet-Technologie, der Webentwicklung Durch die Filtertechnologie fängt das Personal alle vom Webserver verwalteten Webressourcen ab: wie JSP, Servlet, statische Bilddateien oder statische HTML-Dateien usw., um einige spezielle Funktionen zu erreichen. Beispielsweise können einige erweiterte Funktionen wie die Berechtigungszugriffskontrolle auf URL-Ebene, die Filterung vertraulicher Vokabeln und die Komprimierung von Antwortinformationen implementiert werden.

Implementierungsmethode: Erben Sie die Filter-Schnittstelle und implementieren Sie ihre doFilter-Methode. Registrieren Sie die geschriebene Filterklasse in der Datei web.xml und legen Sie die Ressourcen fest, die sie abfangen kann


<filter>指定一个过滤器。
<filter-name>用于为过滤器指定一个名字,该元素的内容不能为空。
<filter-class>元素用于指定过滤器的完整的限定类名。
<init-param>元素用于为过滤器指定初始化参数,它的子元素<param-name>指定参数的名字,<param-value>指定参数的值。
在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。
<filter-mapping>元素用于设置一个 Filter 所负责拦截的资源。一个Filter拦截的资源可通过两种方式来指定:Servlet 名称和资源访问的请求路径
<filter-name>子元素用于设置filter的注册名称。该值必须是在<filter>元素中声明过的过滤器的名字
<url-pattern>设置 filter 所拦截的请求路径(过滤器关联的URL样式)
<servlet-name>指定过滤器所拦截的Servlet名称。
<filter>
  <filter-name>suicaiFilter</filter-name>
  <filter-class>com.suicai.filter.suicaiFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>suicaiFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
Werfen wir einen Blick auf den tatsächlichen Anwendungscode:


public class suicaiFilter implements Filter {
  @Override
  public void destroy() {
  }
  @Override
  public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
    HttpServletRequest req=(HttpServletRequest)request;
    HttpServletResponse res=(HttpServletResponse)response;
    HttpSession session = req.getSession();
    String requestURI = req.getRequestURI();
    String param = req.getQueryString();
    String url = req.getServletPath();
    if(param!=null){
      url = url+"?"+param;
    }
    if(requestURI.contains("js") || requestURI.contains("css") || requestURI.contains("images")){
      //不过滤css,js,images等静态资源
      chain.doFilter(request, response);
    }else if(requestURI.contains("/info/")||requestURI.contains("/gys/")){
      //过滤前台访问页面,跟前台个人中心(供应商后台),自动登录一次,登录不成功不进行操作,个人中心登录不成功,则跳到登录页面
      ProviderInfo providerInfo = (ProviderInfo) session.getAttribute("providerInfo_gys");
      String IsAutomaticLogin = (String) session.getAttribute("IsAutomaticLogin");//是否已经走过自动登录流程标识
      if(requestURI.contains("/info/") && !requestURI.contains("/login")){
        //访问门户等不需要必须登录的(登录除外),只尝试登录一次,如果不成功,不进行操作
        if(providerInfo==null && IsAutomaticLogin == null){
          req.getSession().setAttribute("goURL", url);
          res.sendRedirect(req.getContextPath() + "/common/automaticLogin");
        }else if(providerInfo==null && IsAutomaticLogin != null ){
          chain.doFilter(request, response);
        }else{
          chain.doFilter(request, response);
        }
      }else if(requestURI.contains("/gys/")){//访问个人中心,自登陆一次,不成功跳转到登录页面
        if(providerInfo==null && IsAutomaticLogin == null){
          req.getSession().setAttribute("goURL", url);
          res.sendRedirect(req.getContextPath() + "/common/automaticLogin");
        }else if(providerInfo==null && IsAutomaticLogin != null ){
          session.setAttribute("redirectUrl", url);
          res.sendRedirect(req.getContextPath() + "/login.jsp?redirectUrl="+url);
        }else{
          chain.doFilter(request, response);
        }
      }else{
        chain.doFilter(request, response);
      }
    }else{
      //不过滤
      chain.doFilter(request, response);
    }
  }
  @Override
  public void init(FilterConfig arg0) throws ServletException {
  }
}
Wie Sie dem Code entnehmen können, benötigen Sie eine Kennung (IsAutomaticLogin), um festzustellen, ob Sie sich automatisch angemeldet haben. Diese Kennung wird gespeichert, wenn Sie sich automatisch anmelden (unabhängig davon). ob es erfolgreich ist oder nicht).

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Verwendung von Filtern zur Implementierung der auf Cookies basierenden Kundenzugangs-Anmeldefunktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn