添加自定义注解
package org.book.configuration.aop; import java.lang.annotation.*; @Documented @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface NoCheckLogin { }
创建一个SpringMvcHandler 类,继承HandlerInterceptorAdapter
package org.book.configuration.Handler; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.book.common.JsonResult; import org.book.configuration.aop.NoCheckLogin; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.lang.reflect.Method; @Slf4j public class SpringMvcHandler extends HandlerInterceptorAdapter { public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { } public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { } public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HandlerMethod hm = null; Method method = null; if(handler instanceof HandlerMethod) { hm = (HandlerMethod) handler; method = hm.getMethod();// 获取方法 } else { return true; } // 该方法是否添加 允许未登录访问注解 if (method !=null && method.isAnnotationPresent(NoCheckLogin.class)) { // 不拦截 return true; } String name = (String) request.getSession().getAttribute("user"); if (name != null) { return true; } else { response.setCharacterEncoding("UTF-8"); response.setContentType("application/json; charset=utf-8"); PrintWriter out = null; try { out = response.getWriter(); out.append(new JSONObject().toJSONString(JsonResult.renderFail("用户未登录")) ); }catch (Exception e){ out = response.getWriter(); out.append(new JSONObject().toJSONString(JsonResult.renderError("后台出错"))); log.info(e.getStackTrace().toString()); } return false; } } }
被@NoLoginCheck注解的方法不会被拦截在springmvc配置文件配置拦截路径和排除路径
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <mvc:mapping path="/"/> <mvc:mapping path="/index.jsp"/> <mvc:exclude-mapping path="/assets/**"/> <mvc:exclude-mapping path="/images/**"/> <bean class="org.book.configuration.Handler.SpringMvcHandler"></bean> </mvc:interceptor> </mvc:interceptors>
1)预处理preHandle()方法
用户发送请求时,先执行preHandle()方法。会先按照顺序执行所有拦截器的preHandle方法,一直遇到return false为止,比如第二个preHandle方法是return false,则第三个以及以后所有拦截器都不会执行。若都是return true,则执行用户请求的url方法。
2)后处理postHandle()
方法调用了Service并返回ModelAndView,但未进行页面渲染,可以在这里继续修改ModelAndView
3)返回处理afterCompletion()
方法已经渲染了页面,在afterCompletion中,可以根据ex是否为null判断是否发生了异常,进行日志记录。注:一般使用preHandle这个拦截器进行预处理,对url进行请求拦截
Comments | 13,523 条评论
博客作者 Расстановки Хеллингер
Системные расстановки. https://rasstanovkiural.ru
博客作者 pharmacy drugstore online
always i used to read smaller content which also clear their motive, and that is also happening with this article which I am reading at this place.
博客作者 pharmaceuticals online australia
Hello just wanted to give you a quick heads up. The words in your post seem to be running off the screen in Safari. I’m not sure if this is a format issue or something to do with internet browser compatibility but I figured I’d post to let you know. The style and design look great though! Hope you get the problem solved soon. Thanks
博客作者 Gerardrhync
Fulsome stimulation can show the way to heat-related illnesses such as ignite exhaustion and heatstroke. Vulnerable populations comprehend the of advanced age, young children, and individuals with confirmed illnesses https://excessiveheatawareness.ru/.
博客作者 canadian pharmaceuticals online safe
Thanks for the auspicious writeup. It in truth was a entertainment account it. Look advanced to more added agreeable from you! However, how can we communicate?
博客作者 canadian pharmaceuticals online safe
Wow, this piece of writing is pleasant, my younger sister is analyzing these kinds of things, thus I am going to let know her.
博客作者 pharmacy online drugstore
You can definitely see your expertise in the work you write. The arena hopes for more passionate writers such as you who are not afraid to say how they believe. All the time go after your heart.
博客作者 online pharmacy drugstore
Hello to all, how is everything, I think every one is getting more from this website, and your views are fastidious in support of new viewers.
博客作者 pharmacy online no prescription
This excellent website definitely has all the info I wanted about this subject and didn’t know who to ask.
博客作者 canada pharmaceuticals online
Have you ever thought about including a little bit more than just your articles? I mean, what you say is fundamental and everything. However imagine if you added some great visuals or videos to give your posts more, "pop"! Your content is excellent but with pics and video clips, this blog could definitely be one of the greatest in its field. Fantastic blog!
博客作者 canada drugs pharmacy online
Hello there! I could have sworn I’ve been to this blog before but after checking through some of the post I realized it’s new to me. Nonetheless, I’m definitely happy I found it and I’ll be book-marking and checking back often!
博客作者 online drugstore pharmacy
Greetings! Very useful advice in this particular article! It is the little changes that will make the most important changes. Thanks a lot for sharing!
博客作者 http://www.modnaya.ru/news/cosmo/index.htm
https://www.modnaya.ru/news/cosmo/index.htm
博客作者 apollo pharmacy online
I needed to thank you for this excellent read!! I absolutely loved every little bit of it. I have you book-marked to look at new stuff you post…
博客作者 http://paladiny.ru/pages.dwar.php?PageID=33
https://paladiny.ru/pages.dwar.php?PageID=33