重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
源碼
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),封丘企業(yè)網(wǎng)站建設(shè),封丘品牌網(wǎng)站建設(shè),網(wǎng)站定制,封丘網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,封丘網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
GitHub:https://github.com/291685399/springboot-learning/tree/master/springboot-interceptor01
SpringBoot攔截器可以做什么
可以對(duì)URL路徑進(jìn)行攔截,可以用于權(quán)限驗(yàn)證、解決亂碼、操作日志記錄、性能監(jiān)控、異常處理等
SpringBoot攔截器實(shí)現(xiàn)登錄攔截
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>4.0.0 org.springframework.boot spring-boot-starter-parent 2.0.0.RELEASE com.wyj springboot-interceptor01 0.0.1-SNAPSHOT springboot-interceptor01 springboot攔截器 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-devtools runtime true org.projectlombok lombok true org.springframework.boot spring-boot-starter-thymeleaf springboot-interceptor01 org.springframework.boot spring-boot-maven-plugin
WebMvcConfigurer:繼承WebMvcConfigurationSupport類,重寫(xiě)addInterceptors方法
/** * 在springboot2.0.0之后,WebMvcConfigurerAdapter已經(jīng)過(guò)時(shí)了 * 會(huì)使用WebMvcConfigurer或者WebMvcConfigurationSupport替代 * * @author wyj * @create 2019-06-01 21:48 */ @Configuration public class WebMvcConfigurer extends WebMvcConfigurationSupport { /** * 在springboot2.0.0之前繼承WebMvcConfigurerAdapter類,重寫(xiě)addInterceptors方法 * * @param registry */ // @Override // public void addInterceptors(InterceptorRegistry registry) { // /** // * 攔截器按照順序執(zhí)行,如果不同攔截器攔截存在相同的URL,前面的攔截器會(huì)執(zhí)行,后面的攔截器將不執(zhí)行 // */ // registry.addInterceptor(new AuthorityInterceptor()) // .addPathPatterns("/user/**"); // super.addInterceptors(registry); // } /** * 在springboot2.0.0之后實(shí)現(xiàn)WebMvcConfigurer接口,重寫(xiě)addInterceptors方法 * * @param registry */ // @Override // public void addInterceptors(InterceptorRegistry registry) { // /** // * 攔截器按照順序執(zhí)行,如果不同攔截器攔截存在相同的URL,前面的攔截器會(huì)執(zhí)行,后面的攔截器將不執(zhí)行 // */ // registry.addInterceptor(new AuthorityInterceptor()) // .addPathPatterns("/user/**"); // } /** * 在springboot2.0.0之后繼承WebMvcConfigurationSupport類,重寫(xiě)addInterceptors方法 * * @param registry */ @Override protected void addInterceptors(InterceptorRegistry registry) { /** * 攔截器按照順序執(zhí)行,如果不同攔截器攔截存在相同的URL,前面的攔截器會(huì)執(zhí)行,后面的攔截器將不執(zhí)行 */ registry.addInterceptor(new AuthorityInterceptor()) .addPathPatterns("/user/**"); super.addInterceptors(registry); } }
AuthorityInterceptor:實(shí)現(xiàn)HandlerInterceptor接口,重寫(xiě)preHandle、postHandle、afterCompletion方法
@Slf4j public class AuthorityInterceptor implements HandlerInterceptor { private static final SetNOT_INTERCEPT_URI = new HashSet<>();//不攔截的URI static { NOT_INTERCEPT_URI.add("/user/login.html"); NOT_INTERCEPT_URI.add("/user/login"); } /** * 在請(qǐng)求處理之前進(jìn)行調(diào)用(Controller方法調(diào)用之前) */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception { String uri = request.getRequestURI(); if (NOT_INTERCEPT_URI.contains(uri)) { log.info("不攔截" + uri); return true; } log.info("攔截" + uri); HttpSession session = request.getSession(); UserInfo userInfo = (UserInfo) session.getAttribute("user_info_in_the_session"); if (userInfo == null) { throw new RuntimeException("用戶未登陸"); } return true; } /** * 請(qǐng)求處理之后進(jìn)行調(diào)用,但是在視圖被渲染之前(Controller方法調(diào)用之后) */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView mv) throws Exception { } /** * 在整個(gè)請(qǐng)求結(jié)束之后被調(diào)用,也就是在DispatcherServlet 渲染了對(duì)應(yīng)的視圖之后執(zhí)行 * (主要是用于進(jìn)行資源清理工作) */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception ex) throws Exception { } }
UserController:
@Controller @RequestMapping(value = "/user") public class UserController { @RequestMapping(value = "/login.html") public String index() { return "login"; } @RequestMapping(value = "/login") public String login(User user) { //查詢數(shù)據(jù)庫(kù),我這里直接寫(xiě)死 User dbUser = new User(1, "zhangsan", "123456", "admin"); if (dbUser.getPassword().equals(user.getPassword())) { UserInfo userInfo = new UserInfo(dbUser.getId(), dbUser.getUsername(), dbUser.getRole()); HttpSession session = getRequest().getSession(); session.setAttribute("user_info_in_the_session", userInfo); return "admin"; } return "login"; } @RequestMapping(value = "/userInfo") @ResponseBody public String userInfo() { HttpSession session = getRequest().getSession(); UserInfo userInfo = (UserInfo) session.getAttribute("user_info_in_the_session"); return userInfo.toString(); } private HttpServletRequest getRequest() { return ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); } }
User:
@Data @NoArgsConstructor @AllArgsConstructor public class User implements Serializable { private int id; private String username; private String password; private String role; }
UserInfo: 用于存在用戶信息儲(chǔ)存在session中
@Data @NoArgsConstructor @AllArgsConstructor public class UserInfo implements Serializable { private int id; private String username; private String role; }
login.html:只是一個(gè)很簡(jiǎn)單的登錄表單
登陸頁(yè)面
admin.html:
首頁(yè)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。