1. 程式人生 > >Spring實戰筆記:Web中的Spring

Spring實戰筆記:Web中的Spring

web spring

一.構建Spring Web應用

1.Spring MVC中用戶請求處理

技術分享圖片

上圖展示了請求使用Spring MVC所經歷的所有站點。

1:在請求離開瀏覽器時,會帶有所有請求內容的信息,至少會包含請求的URL。

請求通過Spring的DispatcherServlet前端控制器將請求發送給Spring MVC控制器(Controller)。

2:DispatcherServlet會查詢一個或多個處理器映射(handler mapping)來確定請求的下一站在哪裏。

處理器映射會根據請求所攜帶的URL信息來進行決策。

3:一旦選擇了合適的控制器(Controller),DispatcherServlet會將請求發送給選中的控制器。

到了控制器,請求會卸下提交的信息並等待控制器處理這些信息。

4:控制器處理完之後會產生一些信息即模型(model)。控制器將模型數據打包,並標示出用於渲染輸出的視圖名。然後將請求連同模型和視圖名發送回DispatcherServlet。

5:DispatcherServlet會使用視圖解析器(view resolve)來將邏輯視圖名匹配為一個特定的視圖實現。

6:視圖的實現,交付模型數據。

7:視圖將使用模型數據渲染輸出,這個輸出會通過響應對象傳遞給客戶端。


2.基本控制器

@Controller:聲明為一個控制器;

@RequestMapping:聲明他們所要處理的請求:

@RequestMapping(vaule="/", method=GET):當收到對"/"的HTTP GET請求時,就會調用home()該註解的方法。

@RequestParam:接收請求輸入,將請求作為查詢參數;

@PathVariable:使用占位符,將請求作為路徑的一部分;

兩者不同點使用@RequestParam時,URL是這樣的:http://host:port/path?參數名=參數值

使用@PathVariable時,URL是這樣的:http://host:port/path/參數值

@RequestMapping(value="/user",method = RequestMethod.GET)  
   public @ResponseBody  
   User printUser(@RequestParam(value = "id", required = false, defaultValue = "0")  
   int id) {  
    User user = new User();  
       user = userService.getUserById(id);  
       return user;  
   }  
     
   @RequestMapping(value="/user/{id:\\d+}",method = RequestMethod.GET)  
   public @ResponseBody  
   User printUser2(@PathVariable int id) {  
       User user = new User();  
       user = userService.getUserById(id);  
       return user;  
   }


@Valid:告知Spring,需要確保這個對象滿足校驗限制。

Java校驗API所提供的校驗註解:

註解描述
@AssertFalse所註解的元素必須是Boolean類型,並且值為false
@AssertTrue所註解的元素必須是Boolean類型,並且值為true
@DecimalMax所註解的元素必須是數字,並且值要小於或等於給定的BigDecimalString值
@DecimalMin所註解的元素必須是數字,並且值要大於或等於給定的BigDecimalString
@Digits所註解的元素必須是數字,並且它的值必須有指定的位數
@Future所註解的元素的值必須是一個將來的日期
@Max所註解的元素必須是數字,並且它的值要大於或等於給定的值
@Min所註解的元素必須是數字,並且它的值要小於或等於給定的值
@NotNull所註解元素的值必須不能為null
@Null所註解元素的值必須為null
@Past所註解的元素的值必須是一個已過去的日期
@Parttern所註解的元素的值必須匹配給定的正則表達式
@Size所註解的元素的值必須是String、集合或數組,並且它的長度要符合給定的範圍


@Controller
@RequestMapping(DetailController.VIEW_PREFIX)
public class DetailController extends AjaxBaseController {
public static final String VIEW_PREFIX = "/ajax/detail";
public static final String GET_DETAIL = "/getDetailList";
public static final String FIND = "/find";
@Autowired
private JobDetailService jobDetailService;
/**
* 查找
*/
@ResponseBody
@RequestMapping(value = FIND, method = RequestMethod.GET)
public AjaxPackVo<DetailVo> find(@RequestParam("id") Long id){
AjaxPackVo<DetailVo> packVo = new AjaxPackVo<>();
DetailVo dr = jobDetailService.findVo(id);
packVo.setVo(dr);
return packVo;
}
@ResponseBody
@RequestMapping(value = GET_DETAIL, method = RequestMethod.POST)
public AjaxPackVo<DetailVo> getDetail(@RequestBody DetailSo detailSo){
AjaxPackVo<DetailVo> detailVoAjaxPackVo = new AjaxPackVo<>();
PageList<DetailVo> detailVoPageList = jobDetailService.getPageList(detailSo);
detailVoAjaxPackVo.setPageList(detailVoPageList);
return detailVoAjaxPackVo;
}



@ResponseStatus:異常上添加註解,從而將其映射為某一個HTTP狀態碼;

    @ResponseStatus(value=HttpStatus.NOT_FOUND, reason="Spittle Not Found")  //將異常映射為HTTP狀態404

@ExceptionHandler:方法上添加註解,使其用來處理異常;

二.保護Web應用

使用Spring Security為Web應用提供安全性,保護應用中的信息。

Spring Security提供了完整的安全性解決方案,能夠在Web請求級別和方法調用級別處理身份認證和授權。充分利用了依賴註入和面向切面技術。

Spring Security從兩個角度解決安全性問題:

(1)使用Servlet規範中的Filter保護Web請求並限制URL級別的訪問;

(2)Spring Security還能夠使用Spring AOP保護方法調用--借助於對象代理和使用通知。能夠確保只有具備適當權限的用戶才能訪問安全保護的方法。

Spring Security被分成11個模塊:

模塊描述
ACL支持通過訪問控制列表(ACL)為域對象提供安全性
切面(Aspects)一個很小的模塊,當使用Spring Security註解時,會使用基於AspectJ的切面,而不是使用標準的Spring AOP
CAS客戶端提供與Jasig的中心認證服務(Central Authentication Service,CAS)進行集成的功能
配置(Configuration)包含通過XML和Java配置Spring Security的功能支持
核心(Core)提供Spring Security基本庫
加密(Cryptography)提供了加密和密碼編碼的功能
LDAP支持基於LDAP進行認證
OpenID支持使用OpenID進行集中式認證
Remoting提供了對Spring Remoting的支持
標簽庫(Tag Library)Spring Security的JSP標簽庫
Web提供了Spring Security基於Filter的Web安全性支持


@EnableWebSecurity:該註解將會啟用Web安全功能,它必須配置在一個實現了WebSecurityConfigure的bean中;

@EnableWebMvcSecurity:如果你的應用正好是使用Spring MVC開發的,那麽就應該考慮使用該註解代替@EnableWebSecurity;

@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{}



Spring實戰筆記:Web中的Spring