中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

淘客怎么樣做網(wǎng)站谷歌推廣app

淘客怎么樣做網(wǎng)站,谷歌推廣app,網(wǎng)站分類導(dǎo)航代碼,域名和網(wǎng)站名不一樣認(rèn)識(shí)JSR303 JSR303是一項(xiàng)Java標(biāo)準(zhǔn)規(guī)范,也叫做Bean Validation規(guī)范,提供了一種JavaBean數(shù)據(jù)驗(yàn)證的規(guī)范方式。在SpringMVC中,可以通過(guò)引入JSR303相關(guān)的依賴,來(lái)實(shí)現(xiàn)數(shù)據(jù)的校驗(yàn)。 在使用JSR303進(jìn)行校驗(yàn)時(shí),需要在需要校驗(yàn)的…

認(rèn)識(shí)JSR303

JSR303是一項(xiàng)Java標(biāo)準(zhǔn)規(guī)范,也叫做Bean Validation規(guī)范,提供了一種JavaBean數(shù)據(jù)驗(yàn)證的規(guī)范方式。在SpringMVC中,可以通過(guò)引入JSR303相關(guān)的依賴,來(lái)實(shí)現(xiàn)數(shù)據(jù)的校驗(yàn)。

在使用JSR303進(jìn)行校驗(yàn)時(shí),需要在需要校驗(yàn)的JavaBean的屬性上添加相應(yīng)的注解,如@NotNull、@Size等。同時(shí),還需要在需要進(jìn)行校驗(yàn)的方法中使用@Valid注解進(jìn)行標(biāo)注,以通知SpringMVC進(jìn)行校驗(yàn)操作。

JSR303提供了一些基本的校驗(yàn)注解,如@NotNull、@Size、@Pattern等,還可以通過(guò)自定義注解來(lái)實(shí)現(xiàn)更復(fù)雜的校驗(yàn)邏輯。除了基本的校驗(yàn)注解之外,JSR303還提供了一些組合注解,如@Valid、@GroupSequence等,可以更靈活地進(jìn)行校驗(yàn)。

總的來(lái)說(shuō),JSR303在SpringMVC中的應(yīng)用非常廣泛,可以有效地提高數(shù)據(jù)的安全性和可靠性。

為什么要用

認(rèn)識(shí)了JSR303那我們?yōu)槭裁匆盟?#xff1f;

  1. 簡(jiǎn)單易用:JSR303提供了一些簡(jiǎn)單明了的注解和API,使得驗(yàn)證輸入數(shù)據(jù)變得非常容易。

  2. 代碼可讀性:使用JSR303注解能讓代碼更具可讀性,因?yàn)轵?yàn)證的邏輯可以直接在Java Bean中看到。

  3. 減少重復(fù)代碼:使用JSR303注解可以避免編寫重復(fù)的驗(yàn)證代碼,并降低了維護(hù)和測(cè)試成本。

  4. 標(biāo)準(zhǔn)化:JSR303是Java EE標(biāo)準(zhǔn)之一,使用它可以使得代碼更加標(biāo)準(zhǔn)化、可移植。

  5. 安全性:使用JSR303注解可以提高代碼的安全性,因?yàn)榭梢詫?duì)輸入數(shù)據(jù)進(jìn)行有效的驗(yàn)證,從而避免了安全漏洞的出現(xiàn)。

  6. 可擴(kuò)展性:JSR303提供了一種簡(jiǎn)單的機(jī)制來(lái)擴(kuò)展驗(yàn)證規(guī)則,從而使其滿足應(yīng)用程序的需求。

?注解

給大家解釋一下

JSR303的注解主要用于驗(yàn)證Java Bean的屬性,以確保屬性的有效性和完整性。具體來(lái)說(shuō),主要有以下作用:

  1. 更方便地驗(yàn)證輸入數(shù)據(jù):通過(guò)使用JSR303的注解,可以很方便地驗(yàn)證輸入數(shù)據(jù)是否符合要求,從而減少了開發(fā)人員的工作量。

  2. 提高程序的可維護(hù)性:通過(guò)在Java Bean的屬性上定義驗(yàn)證規(guī)則,可以將驗(yàn)證邏輯與業(yè)務(wù)邏輯分離,從而使程序更易于維護(hù)和擴(kuò)展。

  3. 增加程序的健壯性:通過(guò)對(duì)Java Bean屬性的驗(yàn)證,可以有效地防止非法輸入數(shù)據(jù)對(duì)程序的影響,減少程序出錯(cuò)的概率,增加程序的健壯性。

  4. 提高程序的安全性:通過(guò)對(duì)Java Bean屬性的驗(yàn)證,可以確保輸入數(shù)據(jù)的有效性和完整性,從而減少了程序被攻擊的風(fēng)險(xiǎn)。

1. @NotNull:驗(yàn)證字段不為null。

2. @NotBlank:驗(yàn)證字段不為空,即長(zhǎng)度大于0,去掉空格后長(zhǎng)度大于0。

3. @NotEmpty:驗(yàn)證字段不為空,即長(zhǎng)度大于0。

4. @Min:驗(yàn)證數(shù)字字段的最小值。

5. @Max:驗(yàn)證數(shù)字字段的最大值。

6. @Size:驗(yàn)證字段的大小范圍。

7. @DecimalMin:驗(yàn)證十進(jìn)制數(shù)字段的最小值。

8. @DecimalMax:驗(yàn)證十進(jìn)制數(shù)字段的最大值。

9. @Pattern:驗(yàn)證字段匹配正則表達(dá)式。

10. @Email:驗(yàn)證字段為Email格式。

11. @Length:驗(yàn)證字段的長(zhǎng)度。

12. @Range:驗(yàn)證字段的值在范圍內(nèi)。

13. @Valid:驗(yàn)證嵌套對(duì)象。

14. @AssertTrue:驗(yàn)證字段為true。

15. @AssertFalse:驗(yàn)證字段為false。

16. @Past:驗(yàn)證日期字段在當(dāng)前時(shí)間之前。

17. @Future:驗(yàn)證日期字段在當(dāng)前時(shí)間之后。

?總之,JSR303的注解可以使程序更加健壯、安全、可維護(hù)和易于開發(fā)。

入門

導(dǎo)入依賴
<!-- JSR303 -->
<hibernate.validator.version>6.0.7.Final</hibernate.validator.version><!-- JSR303 -->
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>${hibernate.validator.version}</version>
</dependency>
MusicController?

在我們的MusicController方法中添加以下代碼

 //    給數(shù)據(jù)添加服務(wù)端校驗(yàn)@RequestMapping("/valiAdd")public String valiAdd(@Validated Music music, BindingResult result, HttpServletRequest req){
//        如果服務(wù)端驗(yàn)證不通過(guò),有錯(cuò)誤if(result.hasErrors()){
//            服務(wù)端驗(yàn)證了實(shí)體類的多個(gè)屬性,多個(gè)屬性都沒有驗(yàn)證通過(guò)List<FieldError> fieldErrors = result.getFieldErrors();Map<String,Object> map = new HashMap<>();for (FieldError fieldError : fieldErrors) {
//                將多個(gè)屬性的驗(yàn)證失敗信息輸送到控制臺(tái)System.out.println(fieldError.getField() + ":" + fieldError.getDefaultMessage());map.put(fieldError.getField(),fieldError.getDefaultMessage());}req.setAttribute("errorMap",map);}else {this.musicBiz.insertSelective(music);return "redirect:list";}return "mic/edit";}
配置校驗(yàn)?

制定規(guī)則限制他

 @NotNull(message = "學(xué)生編號(hào)不能為空")private Integer mid;@NotBlank(message = "學(xué)生名稱不能為空")private String mname;@NotBlank(message = "學(xué)生年齡不能為空")private String mtype;@NotBlank(message = "學(xué)生性別不能為空")private String minfo;

?

認(rèn)識(shí)攔截器?

Spring攔截器(Interceptor)是Spring MVC框架中的一種機(jī)制,用于在請(qǐng)求處理前和請(qǐng)求處理后攔截請(qǐng)求。Spring的攔截器類似于JavaEE中的過(guò)濾器(Filter),但是比過(guò)濾器更加靈活和強(qiáng)大。

Spring攔截器通過(guò)在配置文件中配置攔截器實(shí)現(xiàn)類,來(lái)將攔截器注入到Spring容器中。攔截器可以對(duì)請(qǐng)求進(jìn)行前置處理(preHandle)、后置處理(postHandle)和完成處理(afterCompletion)。在攔截器中,可以實(shí)現(xiàn)很多業(yè)務(wù)邏輯,比如:日志記錄、權(quán)限驗(yàn)證、參數(shù)驗(yàn)證等。

Spring攔截器可以攔截MVC請(qǐng)求、WebSocket請(qǐng)求、Restful請(qǐng)求等。在攔截器中,可以獲取請(qǐng)求的相關(guān)參數(shù)、請(qǐng)求頭等信息,可以對(duì)請(qǐng)求參數(shù)進(jìn)行驗(yàn)證和修改,還可以在請(qǐng)求前后記錄日志等操作。

使用Spring攔截器可以讓我們的代碼更加簡(jiǎn)潔,更加易于維護(hù)和擴(kuò)展。同時(shí),它也提高了代碼的可用性和可讀性,使我們的應(yīng)用程序更加健壯和高效。

?為什么要用攔截器

攔截器是一種在請(qǐng)求處理前或處理后攔截請(qǐng)求和響應(yīng)的機(jī)制。它可以在請(qǐng)求到達(dá)目標(biāo)之前對(duì)請(qǐng)求進(jìn)行預(yù)處理或在目標(biāo)處理完響應(yīng)后對(duì)響應(yīng)進(jìn)行后續(xù)處理。攔截器的作用是可以統(tǒng)一處理請(qǐng)求和響應(yīng)數(shù)據(jù),比如請(qǐng)求參數(shù)的校驗(yàn)、權(quán)限認(rèn)證、日志記錄等,可以減少代碼重復(fù)、提高代碼復(fù)用性、增強(qiáng)代碼的可維護(hù)性和可測(cè)試性。此外,攔截器可以對(duì)請(qǐng)求和響應(yīng)數(shù)據(jù)做出細(xì)粒度的控制,可以在某些特定的請(qǐng)求或響應(yīng)條件下觸發(fā)特定的處理邏輯,從而滿足業(yè)務(wù)需求。因此,使用攔截器可以讓我們更好地控制和管理請(qǐng)求和響應(yīng)數(shù)據(jù),提高應(yīng)用程序的可靠性和安全性。

攔截器應(yīng)用的場(chǎng)景
  1. 請(qǐng)求參數(shù)的校驗(yàn):可以對(duì)請(qǐng)求中的參數(shù)進(jìn)行非空、數(shù)據(jù)類型、長(zhǎng)度等方面的校驗(yàn),增強(qiáng)應(yīng)用程序的健壯性。

  2. 權(quán)限認(rèn)證:可以對(duì)用戶的登錄狀態(tài)、權(quán)限、角色等方面進(jìn)行認(rèn)證和授權(quán),保護(hù)應(yīng)用程序的安全性。

  3. 日志記錄:可以在請(qǐng)求進(jìn)入和響應(yīng)退出時(shí)記錄相關(guān)的系統(tǒng)日志,方便開發(fā)人員進(jìn)行問(wèn)題排查和性能優(yōu)化。

  4. 緩存處理:可以對(duì)某些請(qǐng)求進(jìn)行緩存,避免重復(fù)查詢數(shù)據(jù)庫(kù)等操作,提高應(yīng)用程序的性能。

  5. 數(shù)據(jù)加密:可以對(duì)請(qǐng)求和響應(yīng)數(shù)據(jù)進(jìn)行加密和解密,保護(hù)敏感數(shù)據(jù)的安全性。

  6. 異常處理:可以在請(qǐng)求處理發(fā)生異常時(shí)進(jìn)行處理,返回特定的錯(cuò)誤信息,避免系統(tǒng)崩潰或返回不友好的錯(cuò)誤信息。

總之,攔截器可以應(yīng)用于幾乎所有的 Web 應(yīng)用程序,可以對(duì)請(qǐng)求和響應(yīng)數(shù)據(jù)進(jìn)行各種處理和控制,從而提高應(yīng)用程序的可靠性、安全性和性能。

過(guò)濾器與攔截器的區(qū)別

  1. 過(guò)濾器屬于Servlet規(guī)范的一部分,攔截器則是SpringMVC框架的一部分。

  2. 過(guò)濾器的作用范圍是Servlet,攔截器的作用范圍是方法級(jí)別和類級(jí)別。

  3. 過(guò)濾器可以修改HTTP請(qǐng)求和響應(yīng),攔截器可以在執(zhí)行方法之前、之后、異常拋出后等不同的階段進(jìn)行處理。

  4. 過(guò)濾器使用Servlet容器管理,攔截器則使用Spring容器管理。

  5. 過(guò)濾器可以防止惡意訪問(wèn)和跨站腳本攻擊等,攔截器可以實(shí)現(xiàn)權(quán)限驗(yàn)證、日志記錄等。

用戶登錄權(quán)限?

Spring-mvc

Spring-mvc.xml中配置多攔截器

 <!--&lt;!&ndash;    用戶權(quán)限的請(qǐng)求攔截&ndash;&gt;--><mvc:interceptors><bean class="com.zhanghao.interceptor.LoginInterceptor"></bean></mvc:interceptors><mvc:interceptors><!--2) 多攔截器(攔截器鏈)--><mvc:interceptor><mvc:mapping path="/**"/><bean class="com.zhanhao.interceptor.OneInterceptor"/></mvc:interceptor><mvc:interceptor><mvc:mapping path="/mic/**"/><bean class="com.zhanghao.interceptor.TwoInterceptor"/></mvc:interceptor></mvc:interceptors>

LoginInterceptor?

創(chuàng)造一個(gè)LoginInterceptor攔截器

package com.zhnaghao.interceptor;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("【implements】:preHandle...");StringBuffer url = request.getRequestURL();if (url.indexOf("/login") > 0 || url.indexOf("/logout") > 0){//        如果是 登錄、退出 中的一種return true;}
//            代表不是登錄,也不是退出
//            除了登錄、退出,其他操作都需要判斷是否 session 登錄成功過(guò)String mname = (String) request.getSession().getAttribute("mname");if (mname == null || "".equals(mname)){response.sendRedirect("/page/login");return false;}return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {}
}

OneInterceptor

package com.zhanghao.interceptor;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class OneInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("【OneInterceptor】:preHandle...");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("【OneInterceptor】:postHandle...");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("【OneInterceptor】:afterCompletion...");}
}

TwoInterceptor

package com.zhanghao.interceptor;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class TwoInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("【TwoInterceptor】:preHandle...");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("【TwoInterceptor】:postHandle...");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("【TwoInterceptor】:afterCompletion...");}
}

jsp

接著創(chuàng)造一個(gè)新的jsp,用來(lái)寫我們的登入頁(yè)面代碼如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>用戶登入</title>
</head>
<body>
<form action="${pageContext.request.contextPath }/login" method="post" enctype="multipart/form-data"><label>用戶名稱:</label><br/><input type="text" name="mname"/><br/><input type="submit" value="登入"/>
</form>
</body>
</html>

今天的分享就到這了?

http://www.risenshineclean.com/news/4013.html

相關(guān)文章:

  • 網(wǎng)站建設(shè)職業(yè)規(guī)劃網(wǎng)頁(yè)設(shè)計(jì)教程
  • 外國(guó)做愛視頻網(wǎng)站網(wǎng)上銷售渠道
  • WordPress 插件修改界面seo 公司
  • 佛山外貿(mào)網(wǎng)站建設(shè)企業(yè)網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)論文
  • 用KEGG網(wǎng)站做通路富集分析谷歌搜索為什么用不了
  • 淮安網(wǎng)站建設(shè)價(jià)格網(wǎng)絡(luò)廣告營(yíng)銷案例
  • 深圳網(wǎng)絡(luò)科技公司大全網(wǎng)站seo是什么意思
  • 教人做衣服得網(wǎng)站有哪些純手工seo公司
  • 網(wǎng)站注冊(cè)流程推廣渠道有哪些方式
  • 攝影網(wǎng)站建設(shè)內(nèi)容品牌推廣的概念
  • 市建設(shè)局網(wǎng)站的綜合業(yè)務(wù)管理平臺(tái)網(wǎng)站seo入門基礎(chǔ)教程
  • 怎么做游戲充值代理網(wǎng)站百度指數(shù)代表什么
  • ubuntu下做網(wǎng)站百度seo入駐
  • 網(wǎng)站建設(shè)需要的一些技術(shù)最新新聞實(shí)時(shí)新聞
  • 簡(jiǎn)單網(wǎng)站制作成品推廣普通話的宣傳語(yǔ)
  • 南寧網(wǎng)站推廣v1武漢seo公司
  • 彩票做的最好是個(gè)網(wǎng)站好企業(yè)全網(wǎng)推廣
  • 冠縣網(wǎng)站建設(shè)做百度推廣需要什么條件
  • 深圳小企業(yè)網(wǎng)站建設(shè)設(shè)計(jì)制作seo 推廣服務(wù)
  • 長(zhǎng)安網(wǎng)站建設(shè)百度官網(wǎng)首頁(yè)登錄入口
  • minify wordpressseo信息優(yōu)化
  • 廣州網(wǎng)站制作怎么選百度網(wǎng)站怎么做
  • 吉林沈陽(yáng)網(wǎng)站建設(shè)手機(jī)網(wǎng)站模板建站
  • 不會(huì)代碼可以做網(wǎng)站維護(hù)嗎quark搜索引擎入口
  • 網(wǎng)站刷流量對(duì)網(wǎng)站有影響嗎推廣之家官網(wǎng)
  • 維護(hù)一個(gè)網(wǎng)站的費(fèi)用美國(guó)疫情最新消息
  • 小學(xué)網(wǎng)站建設(shè)方案書seo網(wǎng)絡(luò)推廣怎么做
  • 網(wǎng)站的反鏈要怎么做百度首頁(yè)推薦關(guān)不掉嗎
  • 怎么把dw做的網(wǎng)站分享給別怎么投稿各大媒體網(wǎng)站
  • 閔行區(qū)網(wǎng)站建設(shè)深圳全網(wǎng)信息流推廣公司