자바 필터 로 사용자 자동 로그 인
안전 은 현재 인터넷 업계 에서 특히 중시 하 는 화제 이다.여러분 이 자바 웹 을 배 운 후에 한 사이트 에 안전 제한 이 있어 야 한 다 는 것 을 알 게 되 었 습 니 다.예 를 들 어 사용자 가 로그 인하 지 않 으 면 관련 CRUD 작업 을 허용 하지 않 습 니 다.만약 에 저희 가 배경 에 있 는 모든 Servlet 에서 판단 하면 시스템 효율 을 낮 추고 대량의 코드 가 불필요 합 니 다.그래서 필터 필터 가 생 겼 다.
1.필터 란 무엇 인가
Filter,필 터 는 클 라 이언 트 와 서버 자원 파일 사이 에 있 는 필터 망 입 니 다.자원 파일 에 접근 하기 전에 일련의 필 터 를 통 해 요청 을 수정 하고 판단 하 는 등 규칙 에 맞지 않 는 요청 을 중간 에 차단 하거나 수정 합 니 다.응답 을 필터 하거나 차단 하거나 수정 할 수도 있 습 니 다.
2,필터 구현 차단 과정
1.필터:
servlet 용기 에 의존 합 니 다.구현 에 있어 서 함수 리 셋 을 기반 으로 거의 모든 요청 을 걸 러 낼 수 있 지만 필터 인 스 턴 스 는 용기 초기 화 시 한 번 만 호출 할 수 있 는 것 이 단점 입 니 다.필 터 를 사용 하 는 목적 은 필터 작업 을 해서 우리 가 얻 고 싶 은 데 이 터 를 얻 는 것 입 니 다.예 를 들 어 필터 에서 문자 인 코딩 을 수정 하 는 것 입 니 다.필터 에서 HttpServletRequest 의 일부 인 자 를 수정 합 니 다.예 를 들 어 저속한 문자,위험 문자 등 을 걸 러 냅 니 다.
2.차단기:
웹 프레임 워 크 에 의존 하 는 것 은 SpringMVC 에서 SpringMVC 프레임 워 크 에 의존 하 는 것 이다.실현 에 있어 자바 의 반사 체 제 를 바탕 으로 절단면 프로 그래 밍(AOP)을 위 한 운용 에 속한다.차단 기 는 웹 프레임 워 크 를 기반 으로 호출 되 기 때문에 Spring 의 의존 주입(DI)을 사용 하여 일부 업무 작업 을 할 수 있 으 며,동시에 하나의 차단기 인 스 턴 스 는 하나의 contrller 수명 주기 내 에 여러 번 호출 할 수 있 습 니 다.그러나 단점 은 controller 요청 만 차단 할 수 있 고 정적 자원 에 직접 접근 하 라 는 요청 은 차단 할 수 없다 는 것 이다.
3.둘 의 차이 점:
① 차단 기 는 자바 의 반사 체 제 를 바탕 으로 하고 필 터 는 함수 리 셋 을 바탕 으로 한다.
② 차단 기 는 servlet 용기 에 의존 하지 않 고 필 터 는 servlet 용기 에 의존 합 니 다.
③ 차단 기 는 action 요청 에 만 작용 할 수 있 고 필 터 는 거의 모든 요청 에 작용 할 수 있다.
④ 차단 기 는 action 컨 텍스트,값 스 택 의 대상 에 접근 할 수 있 으 며 필 터 는 접근 할 수 없습니다.
⑤ action 의 수명 주기 에 차단 기 는 여러 번 호출 될 수 있 으 며 필 터 는 용기 가 초기 화 될 때 한 번 만 호출 될 수 있 습 니 다.
⑥ 차단 기 는 IOC 용기 의 각 bean 을 가 져 올 수 있 고 필 터 는 안 된다 는 점 이 중요 합 니 다.차단기 에 service 를 주입 하면 업무 논 리 를 호출 할 수 있 습 니 다.
4.Filter 를 사용 하여 사용자 자동 로그 인
자동 로그 인,첫 번 째 Servlet 1 방문 시 서버 는 사용자 정 보 를 포함 하 는 Cookie 를 보 내 고,이후 클 라 이언 트 가 다시 서버 를 방문 하면 서버 에 Cookie 를 전송 하 며,서버 는 Cookie 에서 사용자 정 보 를 얻어 자동 으로 로그 인 할 수 있다.
문제:모든 Servlet 에서 사용 할 Cookie 정 보 를 검사 해 야 하기 때문에 Serlvet 2\\Servlet 3 등에 대량의 불필요 한 코드 가 발생 합 니 다.
해결:Filter 로 쿠키 로 사용자 정 보 를 검증 합 니 다.
로그 인 폼
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
로그 인 폼로그 인 컨트롤 러
package com.gxuwz.servlet;
import com.gxuwz.po.User;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/LoginServlet3")
public class LoginServlet3 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
if ("admin".equals(username)&&"123456".equals(password)) {
User user = new User();
user.setUsername(username);
user.setPassword(password);
req.getSession().setAttribute("USER_SESSION",user);
String autoLogin = req.getParameter("autoLogin");
if (autoLogin!=null&&!" ".equals(autoLogin)) {
// !
Cookie cookie = new Cookie("autoLogin", username + "-"+password);
cookie.setMaxAge(Integer.parseInt(autoLogin));
cookie.setPath(req.getContextPath());
resp.addCookie(cookie);
}
resp.sendRedirect(req.getContextPath()+"/index.jsp");
}else{
req.setAttribute("errorMsg"," !");
req.getRequestDispatcher("/login.jsp").forward(req,resp);
}
}
}
필터 자동 로그 인
package com.gxuwz.filter;
import com.gxuwz.po.User;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebFilter("/*")
public class AutoFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
String autoLogin = "";
Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
if ("autoLogin".equals(cookie.getName())){
autoLogin=cookie.getValue();
break;
}
}
if (autoLogin!=null) {
String[] parts = autoLogin.split("-");
String username = parts[0];
String password = parts[1];
if ("admin".equals(username)&&"123456".equals(password)) {
User user = new User();
user.setUsername(username);
user.setPassword(password);
req.getSession().setAttribute("USER_SESSION",user);
}
}
chain.doFilter(req, resp);
}
@Override
public void destroy() {
}
}
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" import="java.util.*"
%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title> </title>
</head>
<body>
<br />
<center>
<h3> </h3>
</center>
<br />
<br />
<c:choose>
<c:when test="${sessionScope.user==null }">
<a href="${pageContext.request.contextPath }/login.jsp" rel="external nofollow" > </a>
</c:when>
<c:otherwise>
,${sessionScope.user.username }
<a href="${pageContext.request.contextPath }/LogoutServlet" rel="external nofollow" > </a>
</c:otherwise>
</c:choose>
<hr />
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Project01</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>LogoutServlet</display-name>
<servlet-name>LogoutServlet</servlet-name>
<servlet-class>com.Servlet.LogoutServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LogoutServlet</servlet-name>
<url-pattern>/LogoutServlet</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>LoginServlet</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.Servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
<filter>
<display-name>AutoLoginFilter</display-name>
<filter-name>AutoLoginFilter</filter-name>
<filter-class>com.Filter.AutoLoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AutoLoginFilter</filter-name>
<!-- -->
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
5.테스트입력http://localhost/Project01/login.jsp
브 라 우 저 를 닫 은 후 브 라 우 저 입력 을 다시 엽 니 다.http://localhost/Project01/index.jsp
이상 은 자바 가 Filter 를 사용 하여 사용자 의 자동 로그 인 을 실현 하 는 상세 한 내용 입 니 다.자바 가 Filter 로 자동 로그 인 을 실현 하 는 것 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 시기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.