日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java Web之三大利器

發布時間:2023/12/20 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java Web之三大利器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java Web 三大利器主要有:

  • 1.過濾器。
  • 2.攔截器。
  • 3.監聽器。

一、過濾器

1.什么是過濾器?

過濾器是JavaWeb的三大組件之一。

過濾器它是 JavaEE 的規范,可以在瀏覽器以及目標資源之間起到一個過濾的作用,它的作用是:攔截請求,過濾響應。

Web中的過濾器:當訪問服務器的資源時,過濾器可以將請求攔截下來,完成一些特殊的功能。

2.過濾器的應用場景有哪些?

  • (1)登錄驗證。
  • (2)權限檢查。
  • (3)事務管理。
  • (4)統一編碼處理。
  • (5)敏感字符處理。

3.過濾器的生命周期是什么?

  • (1)服務器啟動,首先執行構造方法和init方法(這兩個方法只執行一次)
  • (2)當有匹配過濾條件的請求時執行doFilter方法(該方法可以執行多次)
  • (3)服務器正常關閉的時候,或者該Filter類重新加載的時候會執行destroy方法(該方法只執行一次)

4.過濾器權限校驗代碼該怎么寫?

@Component public class FilterPerm implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("init......");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;System.out.println("FilterPerm," + request.getRequestURI());RespVO vo = new RespVO();PrintWriter out = null;response.setCharacterEncoding("UTF-8");response.setContentType("application/json; charset=utf-8");try {String token = request.getParameter("token") == null ? null : request.getParameter("token");if (token == null || token == "") {vo.setCode(400);vo.setMsg("未攜帶Token");}if (token != null && "abcdef".equals(token)) {filterChain.doFilter(servletRequest, servletResponse);System.out.println("通過");}if (token != null && !"abcdef".equals(token)) {vo.setCode(403);vo.setMsg("訪問未授權");}} catch (Exception e) {e.printStackTrace();vo.setCode(500);vo.setMsg("Server Error");}out = response.getWriter();String json = JSONUtil.toJsonPrettyStr(vo);// 返回json信息給前端out.append(json);out.flush();}@Overridepublic void destroy() {System.out.println("destroy......");} }

二、攔截器

1.什么是攔截器?

Java里的攔截器是動態攔截Action調用的對象,它提供了一種機制可以使開發者在一個Action執行的前后執行一段代碼,也可以在一個Action執行前阻止其執行,同時也提供了一種可以提取Action中可重用部分代碼的方式。

2.攔截器的應用場景有哪些?

  • (1)權限控制。
  • (2)日志打印。
  • (3)參數校驗。

3.攔截器如何實現對權限的控制?

核心代碼:

AuthInterceptor.java

@Component public class AuthInterceptor implements HandlerInterceptor {/*** 忽略攔截的url*/private String urls[] = {"/xxnet/token"};/*** 進入controller層之前攔截請求** @param httpServletRequest* @param httpServletResponse* @param o* @return* @throws Exception*/@Overridepublic boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {String url = httpServletRequest.getRequestURI();String username = httpServletRequest.getHeader("username");String password = httpServletRequest.getHeader("password");// 遍歷需要忽略攔截的路徑for (String item : this.urls) {if (item.equals(url)) {return true;}}if (username == null || password == null) {httpServletResponse.setCharacterEncoding("UTF-8");httpServletResponse.setContentType("application/json; charset=utf-8");PrintWriter out = null;ResultBody res = new ResultBody(ResultCode.TOKEN_ERROR.getCode(), ResultCode.TOKEN_ERROR.getMsg());res.setMsg("用戶名或密碼不能為空");res.setCode("400");String json = JSONUtil.toJsonPrettyStr(res);httpServletResponse.setContentType("application/json");out = httpServletResponse.getWriter();// 返回json信息給前端out.append(json);out.flush();return false;}if (username != null && password != null) {httpServletResponse.setCharacterEncoding("UTF-8");httpServletResponse.setContentType("application/json; charset=utf-8");PrintWriter out = null;try {//獲取用戶名和密碼Props props = new Props("auth.properties");String userName = props.get(CommonConstant.USERNAME).toString();String pwd = props.get(CommonConstant.USERNAME).toString();if (userName.equals(userName) && pwd.equals(password)) {return true;} else if (!userName.equals(userName) || !pwd.equals(password)) {ResultBody res = new ResultBody();res.setMsg("用戶名或密碼錯誤");res.setCode("500");String json = JSONUtil.toJsonPrettyStr(res);httpServletResponse.setContentType("application/json");out = httpServletResponse.getWriter();// 返回json信息給前端out.append(json);out.flush();return false;} else {ResultBody res = new ResultBody();res.setMsg("未登錄,暫無權限");res.setCode("500");String json = JSONUtil.toJsonPrettyStr(res);httpServletResponse.setContentType("application/json");out = httpServletResponse.getWriter();// 返回json信息給前端out.append(json);out.flush();return false;}} catch (Exception e) {e.printStackTrace();httpServletResponse.sendError(500);return false;}}return true;}@Overridepublic void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {// System.out.println("視圖渲染之后的操作");}}

WebConfig.java

@Configuration public class WebConfig implements WebMvcConfigurer {@Autowiredprivate AuthInterceptor authInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(authInterceptor).addPathPatterns("/**")//攔截所有的路徑.excludePathPatterns( //添加不攔截路徑"/favicon.ico","/swagger-resources/**", //js靜態資源"/webjars/**", //css靜態資源"/api-doc/**","/doc.html","/v2/api-docs/**");} }

三、監聽器

1.什么是監聽器?

監聽器,字面上的理解就是監聽觀察某個事件(程序)的發生情況,當被監聽的事件真的發生了的時候,事件發生者(事件源) 就會給注冊該事件的監聽者(監聽器)發送消息,告訴監聽者某些信息,同時監聽者也可以獲得一份事件對象,根據這個對象可以獲得相關屬性和執行相關操作。

2.監聽器的應用場景有哪些?

  • (1)網站初始化。
  • (2)統計在線人數。
  • (3)統計網站訪問量。
  • (4)實現訪問監控。

3.以統計在線人數,對應的監聽器代碼該如何編寫?

UserHttpSessionListener.java

/*** 使用HttpSessionListener統計在線用戶數的監聽器*/ @Component public class UserHttpSessionListener implements HttpSessionListener {private static final Logger logger = LoggerFactory.getLogger(UserHttpSessionListener.class);/*** 記錄在線的用戶數量*/public Integer count = 0;@Overridepublic synchronized void sessionCreated(HttpSessionEvent httpSessionEvent) {logger.info("新用戶上線了");count++;httpSessionEvent.getSession().getServletContext().setAttribute("count", count);}@Overridepublic synchronized void sessionDestroyed(HttpSessionEvent httpSessionEvent) {logger.info("用戶下線了");count--;httpSessionEvent.getSession().getServletContext().setAttribute("count", count);} }

TestController.java

@RestController @RequestMapping("/listener") public class TestController {GetMapping("/total") public String getTotalUser(HttpServletRequest request, HttpServletResponse response) {Cookie cookie;try {// 把sessionId記錄在瀏覽器中cookie = new Cookie("JSESSIONID", URLEncoder.encode(request.getSession().getId(), "utf-8"));cookie.setPath("/");//設置cookie有效期為2天,設置長一點cookie.setMaxAge( 48*60 * 60);response.addCookie(cookie);} catch (UnsupportedEncodingException e) {e.printStackTrace();}Integer count = (Integer) request.getSession().getServletContext().getAttribute("count");return "當前在線人數:" + count; }}

總結

以上是生活随笔為你收集整理的Java Web之三大利器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。