ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [spring] STS: Interceptor 적용하기
    JAVA 2021. 8. 22. 11:12

    1. 인터셉터 작성


    - 역할 : 로그인 여부 확인

    - 전제 : HandlerInterceptorAdapter 상속받기

     

    >> LoginInterceptor.java

    package com.commu.studyboard.interceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
    
    public class LoginInterceptor extends HandlerInterceptorAdapter {
    
    	@Override
    	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
    			throws Exception {
    		
    		HttpSession session = request.getSession();
    		if(session.getAttribute("memNum")==null) {
    			response.sendRedirect("/member/loginForm");
    			
    			return false;
    		}
    		
    		return true;
    	}
    }

     

     

     

    2. 인터셉터 등록


    - 인터셉터 클래스 빈등록

    - 인터셉터가 작동할 매핑 정하기

     

    >> servlet-context.xml

    	<!-- Interceptor 설정 -->
    	<beans:bean id="LoginInterceptor" class="com.commu.studyboard.interceptor.LoginInterceptor">
    	</beans:bean>
    	
    	<interceptors>
    	    <interceptor>
    	        <mapping path="/board/**"/>  
    	        <exclude-mapping path="/board/list"/>
    	        <exclude-mapping path="/board/content"/>
    	        <beans:ref bean="LoginInterceptor"/>
    	    </interceptor>
    	</interceptors>

    기존 : mvc:mapping, mvc:exclude-mapping => mvc: 이제 사용불가.

    exclude-mapping 같은 경우 spring ver 이 3.2 이후부터 적용가능

     

     

     

    3. spring ver 업그레이드하기


    만약 exclude-mapping 적용하고 싶은데 spring ver 가 3.2 이전일 경우.

     

    1) org.springframework-version 을 아래와 같이 바꾸기

    2) java-version 도 현재 java 버전과 같은 지 확인하기

    	<properties>
    		<java-version>1.8</java-version>
    		<org.springframework-version>4.3.13.RELEASE</org.springframework-version>
    		<org.aspectj-version>1.6.10</org.aspectj-version>
    		<org.slf4j-version>1.6.6</org.slf4j-version>
    	</properties>

    3) build 에 maven-compiler-plugin 수정하기

    source, target 부분.

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.5.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <compilerArgument>-Xlint:all</compilerArgument>
                        <showWarnings>true</showWarnings>
                        <showDeprecation>true</showDeprecation>
                    </configuration>
                </plugin>

    참고 : https://soo-vely-dev.tistory.com/62

     

     

     

    4. 버전 업그레이드 시 controller에서 json으로 변환이 되지 않음.


    No converter found for return value of type: class java.util.HashMap 해결 방법

     

    1) pom.xml에 의존성 추가

    		<!-- jackson -->
    		<dependency>
    			<groupId>com.fasterxml.jackson.core</groupId>
    			<artifactId>jackson-core</artifactId>
    			<version>2.9.2</version>
    		</dependency>
    		<dependency>
    			<groupId>com.fasterxml.jackson.core</groupId>
    			<artifactId>jackson-databind</artifactId>
    			<version>2.9.2</version>
    		</dependency>

     

     

    2) 만약 JSON 객체 사용하고 싶다면..

    컨트롤러에서 JSON 객체를 사용해도 되지만 Map 으로도 @ResponseBody 하여 json 형태로 보내기는 가능하다.

    		<!-- json object[s] -->
    		<dependency>
    		    <groupId>net.sf.json-lib</groupId>
    		    <artifactId>json-lib</artifactId>
    		    <classifier>jdk15</classifier>
    		    <version>2.4</version>
    		</dependency>
    		
    		<dependency>
    		    <groupId>org.codehaus.jackson</groupId>
    		    <artifactId>jackson-mapper-asl</artifactId>
    		    <version>1.9.13</version>
    		</dependency>
    		<dependency>
    		    <groupId>org.codehaus.jackson</groupId>
    		    <artifactId>jackson-core-asl</artifactId>
    		    <version>1.9.13</version>
    		</dependency>
    		<!-- json object[e] -->

     

    3) 컨트롤러 예시

    	//사용가능한 아이디 여부
    	@RequestMapping("/member/checkId")
    	@ResponseBody
    	public JSONObject checkId(String id) {
    		int check = -1;//사용가능 1, 사용불가능 -1
    		
    		System.out.println(id);
    		if((Integer)sqlSession.selectOne("member.checkId", id)!=0) {
    			//결과가 0 일 경우 false, 1 일 경우 if문 실행
    			check = -1;
    		}else {
    			check = 1;
    		}
    		System.out.println(check);
    		JSONObject data = new JSONObject(); // date라는 이름의 JSON 객체
    		data.put("check",check);
    		
    		return data;
    	}

    댓글

Designed by Tistory.