SpringMVC 차단기 사용 예시

12825 단어 SpringMVC차단기
간단 한 소개
SpringMVC 의 프로세서 차단 기 는 Servlet 개발 의 필터 필터 필터 와 유사 하여 프로세서 에 대한 사전 처리 와 사후 처리 에 사용 된다.개발 자 는 특정한 기능 을 실현 하기 위해 일부 차단 기 를 스스로 정의 할 수 있다.
필터
4
  • servlet 규범 중의 일부분 은 모든 자바 웹 프로젝트 에서 사용 할 수 있 습 니 다
  • url-pattern 에/*를 설정 한 후 방문 할 모든 자원 을 차단 할 수 있 습 니 다.
  • 차단기
  • 차단 기 는 SpringMVC 프레임 워 크 자체 의 것 으로 SpringMVC 프레임 워 크 를 사용 한 프로젝트 만 사용 할 수 있 습 니 다
  • 차단 기 는 접근 을 차단 하 는 컨트롤 러 방법 만 있 습 니 다.jsp/html/css/image/js 에 접근 하면 차단 하지 않 습 니 다.
  • 필터 와 차단기 의 차이 점:
    차단 기 는 AOP 사상의 구체 적 인 응용 이다.
    차단기 초기 체험
    1.새로운 항목 을 만 들 고 웹 지원 을 추가 하 며 IDEA 에서 이 항목 에 의존 하 는 lib 패 키 지 를 가 져 옵 니 다.
    2.웹.xml 설정
    
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springmvc-servlet.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
        <filter>
            <filter-name>encoding</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>encoding</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
    
    </web-app>
    
    3.springmvc-servlet.xml 설정
    
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                 http://www.springframework.org/schema/beans/spring-beans.xsd
                 http://www.springframework.org/schema/context
                 http://www.springframework.org/schema/context/spring-context.xsd
                 http://www.springframework.org/schema/mvc
                 http://www.springframework.org/schema/mvc/spring-mvc.xsd">
        <!--      ,             -->
        <context:component-scan base-package="controller"/>
        <mvc:annotation-driven/>
    
        <!-- JSON    -->
        <mvc:annotation-driven>
            <mvc:message-converters register-defaults="true">
                <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                    <constructor-arg value="UTF-8"/>
                </bean>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                    <property name="objectMapper">
                        <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                            <property name="failOnEmptyBeans" value="false"/>
                        </bean>
                    </property>
                </bean>
            </mvc:message-converters>
        </mvc:annotation-driven>
    
        <!--         -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
    
    </beans>
    
    
    4.사용자 정의 차단 기 를 작성 합 니 다.(HandlerInterceptor 인터페이스 구현)
    
    package interceptor;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class MyInterceptor implements HandlerInterceptor {
    
        //            
        //    true        
        //    false          
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("------------   ------------");
            return true;
        }
        //             
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("------------   ------------");
        }
        // dispatcherServlet     ,     .
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("------------  ------------");
        }
    }
    
    
    사실 preHandle 방법 을 다시 쓰 면 된다.
    5.springmvc-servlet.xml 파일 에 차단 기 를 설정 합 니 다.
    
        <!--        -->
        <mvc:interceptors>
            <mvc:interceptor>
                <!--/**          -->
                <!--/admin/*     /admin/add     , /admin/add/user     -->
                <!--/admin/**     /admin/    -->
                <mvc:mapping path="/**"/>
                <!--bean        -->
                <bean class="interceptor.MyInterceptor"/>
            </mvc:interceptor>
        </mvc:interceptors>
    
    6.컨트롤 러 작성
    
    package controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class InterceptorController {
        @RequestMapping("/interceptor")
        public String test(){
            System.out.println("InterceptorController");
            return "ok";
        }
    }
    
    
    7.Tomcat 설정,테스트 진행
    초기 체험:사용자 정의 차단기 가 Handler Interceptor 인 터 페 이 스 를 실현 하고 preHandle 방법 을 다시 썼 습 니 다.preHandle 방법 에서 반환 값 은 차단 여 부 를 결정 합 니 다.반환 값 이 true 일 때 차단 하지 않 습 니 다.반대로 차단 하 다.
    8.결과:
    4.567917.반환 값 은 true 이 고 차단기 가 차단 하지 않 으 며 점프4.567917.반환 값 은 false 이 고 차단기 가 차단 되 며 뛰 지 않 습 니 다.
    차단기 재 체험-로그 인 검증
    사고의 방향 을 실현 하 다.
    4.567917.로그 인 페이지 가 있 습 니 다.contrller 방문 페이지 를 써 야 합 니 다4.567917.로그 인 페이지 에 양식 을 제출 하 는 동작 이 있 습 니 다.controller 에서 처리 해 야 합 니 다.사용자 이름 비밀번호 가 정확 한 지 판단 합 니 다.올 바 르 면 session 에 사용자 정 보 를 기록 합 니 다.로그 인 성공 을 되 돌려 줍 니 다4.567917.사용자 의 요청 을 차단 하고 사용자 의 로그 인 여 부 를 판단 합 니 다.사용자 가 로그 인 했다 면.사용자 가 로그 인하 지 않 으 면 로그 인 페이지 로 이동 합 니 다.
    로그 인 인터페이스
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
       <title>Title</title>
    </head>
    
    <h1>    </h1>
    <hr>
    
    <body>
    <form action="${pageContext.request.contextPath}/user/login">
         :<input type="text" name="username"> <br>
        :<input type="password" name="pwd"> <br>
       <input type="submit" value="  ">
    </form>
    </body>
    </html>
    
    controller 처리 요청
    
    package controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import javax.servlet.http.HttpSession;
    
    @Controller
    @RequestMapping("/user")
    public class UserController {
    
       //       
       @RequestMapping("/jumplogin")
       public String jumpLogin() throws Exception {
           return "login";
      }
    
       //       
       @RequestMapping("/jumpSuccess")
       public String jumpSuccess() throws Exception {
           return "success";
      }
    
       //    
       @RequestMapping("/login")
       public String login(HttpSession session, String username, String pwd) throws Exception {
           //  session        
           System.out.println("    ==="+username);
           session.setAttribute("user", username);
           return "success";
      }
    
       //    
       @RequestMapping("logout")
       public String logout(HttpSession session) throws Exception {
           // session   
           session.invalidate();
           return "login";
      }
    }
    
    로그 인 성공 페이지
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
       <title>Title</title>
    </head>
    <body>
    
    <h1>      </h1>
    <hr>
    
    ${user}
    <a href="${pageContext.request.contextPath}/user/logout">  </a>
    </body>
    </html>
    
    index 페이지
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
     <head>
       <title>$Title$</title>
     </head>
     <body>
     <h1>  </h1>
     <hr>
    <%--  --%>
     <a href="${pageContext.request.contextPath}/user/jumplogin">  </a>
     <a href="${pageContext.request.contextPath}/user/jumpSuccess">    </a>
     </body>
    </html>
    
    index 페이지
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
     <head>
       <title>$Title$</title>
     </head>
     <body>
     <h1>  </h1>
     <hr>
    <%--  --%>
     <a href="${pageContext.request.contextPath}/user/jumplogin">  </a>
     <a href="${pageContext.request.contextPath}/user/jumpSuccess">    </a>
     </body>
    </html>
    
    작성 컨트롤 러
    
    package interceptor;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    public class LoginInterceptor implements HandlerInterceptor {
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            if (request.getRequestURI().contains("login")) {
                return true;
            }
    
            HttpSession session = request.getSession();
    
            //        ,   
            if(session.getAttribute("user") != null) {
                return true;
            }
    
            //       ,  ,        
            request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
            return false;
        }
    }
    
    
    springmvc-servlet.xml 에 차단 기 를 설정 합 니 다.
    
    <mvc:interceptor>
                <mvc:mapping path="/**"/>
                <bean id="loginInterceptor" class="interceptor.LoginInterceptor"/>
            </mvc:interceptor>
    
    Tomcat 설정,테스트.
    결과:로그 인 하지 않 으 면 로그 인 성공 페이지 에 직접 접근 할 수 없습니다.
    이상 은 SpringMVC 중국어 난 장 판 솔 루 션 의 상세 한 내용 입 니 다.SpringMVC 중국어 난 장 판 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 해 주 십시오!

    좋은 웹페이지 즐겨찾기