-
[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; }
'JAVA' 카테고리의 다른 글
[svn] 명령어 정리 (0) 2021.08.24 [svn] eclipse plugin 설치 및 원격SVN 저장소(repository) 연결하기 (0) 2021.08.24 [ajax] 서버와 컨트롤러에서 받는 값 (0) 2021.08.19 [ajax] @RequestBody @ResponseBody JSON.stringify() (0) 2021.08.19 [spring] mybatis: sqlSession&xml 방법 v.s 인터페이스&xml방법 (0) 2021.08.18