우리의 삶에서는 계정에 자동 로그인하는 것이 이미 매우 일반적이므로 필터를 사용 하여이 기능을 구현합니다.
주로 사용자의 자동 로그인 및 취소 된 자동 로그인과 하루 또는 N 일 내에 자동 로그인을 실현할 수 있습니다. 사용자의 IP가 블랙리스트에 추가되면 필터를 직접 사용하여 경고 페이지로 돌아갑니다.
필터의 기능은 매우 강력합니다. 이 기능을 실현하기 위해 서면 프론트 엔드 백엔드 후 서렛을 추가하면됩니다.
추신 : 이것은 단지 데모 일뿐입니다. Access 데이터베이스의 일부를 직접 시뮬레이션하여 주로 자동 로그인 기능 실현에 중점을 두었습니다.
프론트 데스크 코드 :
전경 코드가 성공했는지 여부는이 페이지에 표시됩니다. 사용 된 기술 : JSTL 태그의 적용, 세션 판독 값
<%@ page language = "java"import = "java.util.*"pageencoding = "utf-8"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/core"prefix = "c"%> <! arttype html public "-//01. <html> <head> </head> <body> <c : test = "$ {! empty sessionscope.error}"> 비밀번호 또는 사용자 이름이 잘못되었습니다. <!-표시 후 값을 제거해야합니다-> <c : var = "error"scope = "session"/> </c : if> <c : if test = "$ {empty sessionscope.user}"var = "boo"> <h2> 로그 인 </h2> <양식 action = "<c : url value = in post" ""// postevlet의 페이지입니다. type = "text"name = "name" /> <br/> pwd : <input type = "text"name = "pwd" /> <br/> 자동 로그인 : <input type = "radio"name = "time"value = "0" /> <br/> 언젠가 : <input type = "radio"name = "time"1 ""1 "" "" "" "" "" "" "" "" "" value = "7"/> <br/> <input type = "value ="value = "제출"/> </form> </c : if> <c : if test = "$ {! boo}"> 환영, $ {sessionscope.user}, <a href = ""> module 1 </a> <a href = "" "" "" "" "" "". value = '/cancelautologin'//> "> cancelAutologin </a> </c : if> </body> </html>서블릿의 구현 강령 :
이전 코드와 마찬가지로 프런트 데스크와 상호 작용하는 것만 담당합니다. 이에 사용 된 기술에는 URL 인코딩, 값은 쿠키에 있으며 세션은 페이지에 있으며 페이지가 점프 (전달)됩니다.
public void dopost (httpservletRequest 요청, httpservletResponse 응답) servletexception, ioexception {string name = request.getParameter ( "name"); 문자열 pwd = request.getParameter ( "pwd"); 문자열 시간 = request.getParameter ( "time"); if (name! = null && pwd! = null && name.equals (pwd))) {// 원하는대로 여기로 작성해야합니다. 서비스로 이동해야합니다-> DAO 나중에 데이터베이스에 액세스하려면 나중에 로그인이 성공했다고 가정하면 정보를 세션 request.getSession ()에 저장합니다 ( "사용자", 이름); // 중국어와 호환되면 이름 = urlencoder.encode (이름, "utf-8")를 인코딩해야합니다. pwd = urlencoder.encode (pwd, "utf-8"); 쿠키 C = 새로운 쿠키 ( "autologin", name+","+pwd); //이 값은 이러한 방식으로 사용할 수 없습니다. 보안 고려 사항을 위해서는 암호화 또는 보조 암호화, int _time = 60*60*24*integer.valueof (Time); c.setMaxage (_time); 응답 .addcookie (c); Response.SendRedirect (request.getContextPath ()+"/index.jsp"); // 필터의 기본 설정은 리디렉션을 가로 채고 전달은 직접 내부 전달입니다. 그러나 필터는 처리하기가 쉽지 않지만 Web.xml에서만 구성하면됩니다. } else {request.getSession (). setAttribute ( "error", "1"); response.sendRedirect (request.getContextPath ()+"/index.jsp"); }}지금까지 기술이 없다고 생각합니다. 이전 코드와 동일한 코드는 이제 필터의 기능입니다.
보안 로그인 :
프로젝트에 들어간 후에 로그인하지 않고 사용자가 로그인하는 것을 방지하기 위해 동적 가져 오기를 사용하여 이전에 안전하게 로그인했습니다. 프로젝트에 들어가서 마음대로 인터페이스를 입력 할 수 있습니다. 동적 가져 오기는이 기능을 달성 할 수 있지만 필터를 사용하는 것이 좋습니다.
일반적으로 dofilter ()는 필터에 기록됩니다. 세션 컨테이너가 무효인지 확인하면됩니다. 이것은 로그인되지 않았 음을 의미합니다. 로그인 인터페이스로 돌아갑니다. 그렇지 않으면 놓아 두십시오
코드가 제시됩니다.
public void dofilter (servletrequest 요청, ServletRepponse 응답, 필터 체인 체인)는 ioexception, servletexception {httpservletrequest req = (httpservletrequest) 요청; httpservletresponse resp = (httpservletresponse) 응답; 문자열 세션 = (문자열) req.getSession (). getAttribute ( "사용자"); if (session == null) {System.out.println ( "비정상 로그인"); resp.sendredirect (req.getContextPath ()+"/index.jsp"); } else {System.out.println ( "성공적인 로그인"); Chain.dofilter (Req, resp); }}문자 인코딩 :
문자 인코딩의 문제. 과거에는 매번 Servlet의 dopost ()에 수동으로 입력해야했습니다. 모든 서블릿에는 입력이 필요하므로 너무 번거 롭기 때문에 필터를 사용하여 구현합니다.
코드가 제시됩니다.
<span style = "font-size : 18px;"> public void dofilter (servletrequest 요청, ServletResponse 응답, 필터 체인 체인)는 ioexception, servletexception {request.setcharacterencoding (문자); // setcontentType (setContentType)가 수신 한 incoding을 제거합니다. Chain.dofilter (요청, 응답); } @override public void init (FilterConfig Config)는 servleTeXception {ar } </span>위의 문자는 글로벌 변수로 정의되며 초기 값은 web.xml에서 구성됩니다.
web.xml 코드가 제공됩니다.
<filter> <filter-name> 문자 </filter-name> <filter-class> cn.hncu.filter.characterfilter </filter-class> <init-param> <param-name> 문자 </param-name> <param-value> UTF-8 </param-value> </init-param> </filter>
자동 로그인 :
주요 아이디어 : 자동 로그인은 세션에 값이 있는지 결정해야합니다. 그렇지 않으면 로그인 한 후에는 없으면 로컬 쿠키로 이동하여 데이터베이스를 찾아서 데이터베이스를 일치시킵니다. 일치가 성공하면 세션 컨테이너를 추가하십시오.
코드가 제시됩니다.
Public Void Dofilter (Servletrequest 요청, ServletResponse 응답, Filterchain 체인) IoException, ServleTeXception {// 자동 로그인하려면 세션에 값이 있음을 설정해야합니다. 있으면 로그인 한 적이 있고 쿠키의 데이터에 액세스해야합니다. 쿠키의 데이터 // 데이터베이스의 데이터가 데이터베이스와 일치하는지 여부? 예, 여기에서 세션에서 값을 설정하십시오. 아니요, httpservletrequest req = (httpservletrequest) 요청을하자. httpservletresponse resp = (httpservletresponse) 응답; 문자열 세션 = (문자열) req.getSession (). getAttribute ( "사용자"); if (session == null) {// 현재 CS [] = req.getCookies ()에 쿠키가 로그인되지 않았 음을 나타냅니다. if (cs! = null) {for (cookie c : cs) {if (c.getName (). equals ( "autologin")) {String value = c.getValue (); // 이것은 암호화되었지만 쉼표와 연결되어 있습니다. String [] strs = value.split ( ","); // logserlvet에서 먼저 인코딩을 사용한 다음 쉼표 연결을 사용합니다. 문자열 이름 = urldecoder.decode (strs [0], "utf-8")를 반전해야합니다. 문자열 pwd = urldecoder.decode (strs [1], "utf-8"); // 데이터베이스에 액세스하기 위해 이름, pwd 데이터를 배경으로 가져 오면 (name.equals (pwd)) {req.getSession (). setAttribute ( "user", name); // 세션에서 매개 변수를 설정합니다. }}}}} chain.dofilter (req, resp); // 당신은 놓아야합니다. . }블랙리스트 사용자
로그인하지 않고 블랙리스트 사용자가 결과를 알려줍니다.
코드가 제시됩니다.
public void dofilter (servletrequest 요청, ServletRepponse 응답, 필터 체인 체인)는 ioexception, servletexception {httpservletrequest req = (httpservletrequest) 요청; httpservletresponse resp = (httpservletresponse) 응답; 문자열 ip = req.getRemoTeaddr (); // 액세스 IP; System.out.println (ip+"iipp"); if (set.contrains (ip)) {// 블랙리스트 시스템 내부 .out.println ( "set"); resp.getWriter (). print ( "당신은 블랙리스트에 있습니다 .. <a href = '"+req.getContextPath ()+"/index.jsp'> return </a>"); // 서버에서 요청할 때 인덱스가 직접 인터박하기 때문에 return} else {chain.dofilter (req, resp); }} 블랙리스트로 반환 된 유형이 최고입니다. 여기에 수동으로 추가했습니다. 원래 도구 클래스를 작성하여 데이터베이스에서 읽어야합니다. 확인할 수있을뿐만 아니라 블랙리스트를 추가, 삭제 및 수정할 수도 있습니다.
코드가 제시됩니다.
해시 세트는 글로벌 변수로 정의되며, 세트는 contains contains이며 매우 효율적입니다.
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"); }자동 로그인을 취소합니다
자동 로그인이 항상 안전하지 않은 것으로 간주되면 자동 로그인이 없음을 설정했습니다.
자동 로그인은 쿠키에 저장된 기술에 의존하기 전에 알았으므로 쿠키 만 삭제하면됩니다.
자동 로그인 취소는 하이퍼 링크이므로 서블릿으로 작성됩니다.
코드가 제시됩니다.
public void dopost (httpservletrequest req, httpservletreponse resp)를 servletexception, ioexception {쿠키 cc = new Cookie ( "autologin", ""); // 쿠키를 삭제하는 메소드는 같은 이름으로 코키를 만드는 것입니다. cc.setmaxage (0); cc.setpath (req.getContextPath ()); resp.addcookie (CC); resp.sendredirect (req.getContextPath ()+"/index.jsp"); }위는 이러한 짧은 대답 기능을 실현할 수 있습니다.
위의 것은 자동 로그인을 달성하고 자동 로그인을 취소하기 위해 필터를 사용하여 필터를 사용하여 편집기가 Javaee에 소개 한 관련 지식에 대한 자세한 설명입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!