springmvc 차단기 로그 인 검증 예시
spring-mvc.xml 에 차단 기 를 설정 합 니 다:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/user/*"/>
<!-- mvc:interceptor -->
<bean class="com.wyb.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
위 와 같이 LoginIntercepter 가 설정 되 어 있 습 니 다.간단하게 보기 위해 서 이 필 터 는 URL 이'/user/*'인 요청 만 차단 합 니 다.차단 할 요청 에 대응 하 는 컨트롤 러 는 다음 과 같 습 니 다.
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.wyb.domain.User;
import com.wyb.service.IUserService;
import com.wyb.service.impl.UserServiceImpl;
@Controller
@RequestMapping("/user")
public class UserController {
private static final Logger LOG=Logger.getLogger(UserController.class);
@Autowired
private IUserService userService;
@RequestMapping("/showAllUser")
public String showAllUser(Model m){
List<User> userlist=new ArrayList<User>();
userlist=userService.findAllUser();
for(User user :userlist){
System.out.println(user.getUserName());
}
return "/jsp/showAllUser";
}
}
이 쇼 AllUser()방법 은 모든 사용 자 를 출력 하기 위 한 것 입 니 다.실행 방법 을 표시 하기 위해 모든 사용 자 를 배경 으로 인쇄 합 니 다.URL 은 다음 과 같 습 니 다.http://localhost:8080/TestSSM/user/showAllUser이 URL 은 LoginIntercepter 에 의 해 차단 되 는 것 을 알 수 있 습 니 다.테스트 페이지 showAllUser.jsp 는 다음 과 같 습 니 다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>show All User</title>
</head>
<body>
this is showAllUser Page!!!
</body>
</html>
LoginIntercepter 는 다음 과 같 습 니 다.
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.wyb.domain.User;
public class LoginInterceptor implements HandlerInterceptor{
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("this is afterCompletion of LoginInterceptor");
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
System.out.println("this is postHandle of LoginInterceptor");
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
// TODO Auto-generated method stub
System.out.println("this is preHandle of LoginInterceptor");
HttpSession session=request.getSession();
User user=(User)session.getAttribute("user");
if(user==null){
System.out.println("no user in LoginInterceptor!!!");
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
}
// true
return true;
}
}
여기 서 제 가 실 수 를 했 습 니 다.똑똑 한 동료 들 이 알 아 봤 을 수도 있 습 니 다.위의 코드 에 따라 우리 가 방문 하면:http://localhost:8080/TestSSM/user/showAllUser결 과 는 다음 과 같다.어떻게 보면 차단 에 성공 하여 사용자 이름 정 보 를 입력 하고 홈 페이지 로 정상적으로 이동 하여 다시 들 어 갑 니 다.http://localhost:8080/TestSSM/user/showAllUser다음 과 같다.
페이지 가 정상적으로 출력 되 었 습 니 다.session 이 기록 되 어 있 습 니 다.다시 차단 되 지 않 습 니 다.성공 한 것 같 지만 배경 출력 을 보십시오.
우리 가 쇼 AllUser()방법 을 두 번 실 행 했 는 지 알 수 있 습 니까?첫 번 째 방문 은 차단기 에 의 해 차단 되 어 로그 인 페이지 에 들 어 갔 지만 백 스테이지 에 서 는 쇼 AllUser()가 몰래 실 행 된 것 을 알 수 있 습 니 다.왜 일 까요?우 리 는 나중에 다시 LoginIntercepter.java,특히 preHandle()방법 을 살 펴 보 자.
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
// TODO Auto-generated method stub
System.out.println("this is preHandle of LoginInterceptor");
HttpSession session=request.getSession();
User user=(User)session.getAttribute("user");
if(user==null){
System.out.println("no user in LoginInterceptor!!!");
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
}
// true
return true;
}
user 가 비어 있다 고 판단 한 후에 페이지 전환 을 실 행 했 지만 프로그램 은 계속 실 행 될 것 이 고 마지막 에 true 로 돌아 가 는 것 은 차단 되 어 있 는 업무 논리 가 계속 아래로 실 행 될 수 있다 는 것 을 의미 하기 때문에 겉으로 차단 되 었 지만 본질 적 으로 차단 되 지 않 았 다.따라서 다음 과 같이 수정 해 야 한다.
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
// TODO Auto-generated method stub
System.out.println("this is preHandle of LoginInterceptor");
HttpSession session=request.getSession();
User user=(User)session.getAttribute("user");
if(user==null){
System.out.println("no user in LoginInterceptor!!!");
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
// ,
return false;
}
// true
return true;
}
user 가 비어 있 습 니 다.이동 한 후에 false 로 돌아 가면 차단 되 는 업무 논 리 를 실행 하지 않 습 니 다.수정 후 배경 출력 은 다음 과 같 습 니 다.현재 배경 에서 정상적으로 출력 되 고 session 에서 user 정 보 를 저장 한 후에 야 쇼 AllUser()방법 을 실행 할 수 있 습 니 다.큰 성 과 를 거 두 었 습 니 다!
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
springmvc application/octet-stream problemmistake: Source code: Solution: Summarize: application/octet-stream is the original binary stream method. If the convers...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.