Spring实战笔记:Web中的Spring
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章