springmvc利用攔截器進行許可權校驗Jackson資料傳輸
需要了解攔截器
自定義一個類 實現HandlerInterceptor 或 繼承HandlerInterceptorAdapter
重寫下面三個方法 順序依次如下
//在 handler執行之前執行 返回值為ture才會執行 攔截器或handler
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
response.setContentType("application/json;charset=utf-8");//設定響應編碼
User user = (User) request.getSession().getAttribute("user");
if (user==null){
PrintWriter out = response.getWriter();
ObjectMapper objectMapper = new ObjectMapper();//需要匯入jackson依賴
String result = objectMapper.writeValueAsString(new Result(false, "未登入!"));//將物件轉換為json字串
out.write(result);//響應給使用者
return false;
}
return true;
}
//在 handler執行之後執行
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
}
//在 響應前執行
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
}
攔的執行需要在spring-mvc.xml中配置攔截器[因具體情況配置響應編碼]
<mvc:interceptors>
<mvc:interceptor>
<!-- 攔截所有請求 -->
<mvc:mapping path="/**"/><!-- Spring MVC 攔截路徑 -->
<!-- 使用bean定義一個Interceptor -->
<bean class="自定義類的許可權定類名" />
</mvc:interceptor>
</mvc:interceptors>
<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>