spring实战笔记:web中的spring

     2022-03-28     613

关键词:

一.构建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实战笔记二

一、Spring配置的方式    spring容器用来创建应用程序中的bean,并通过DI来协调这些对象间的关系。    在bean进行装配时,spring提供了三种主要的装配机制。      ①在XML中进行显式配置      ②在Java中进... 查看详情

spring实战读书笔记spring装配bean(代码片段)

...过Xml装配Bean借助构造器注入初始化bean设置属性混合配置Spring容器负责创建应用程序中的bean并通过DI来装配(wiring)他们。Spring有三种装配方式,三种方式可以搭配使用 (1)隐式的bean发现 查看详情

spring实战笔记:spring核心

springcore一.简介: 1.依赖注入(DI)   优点:解耦   Spring通过应用上下文(ApplicationContext)装载bean的定义,并把它们组装起来。   Spring应用上下文负责对象的创建和组装。    &n... 查看详情

前方高能预警!阿里大佬出品“spring实战学习笔记”震撼来袭

Spring框架已经成为Java开发人员的必备知识,而且Spring3引入了强大的新特性,例如SpEL、Spring表达式语言、loC容器的新注解以及用户急需的对REST的支持。无论你是刚刚接触Spring还是被Spring3.0的新特性所吸引,这份笔记... 查看详情

《spring实战》学习笔记-第五章:构建springweb应用程序

5.1 SpringMVC起步5.1.1 跟踪SpringMVC的请求  每当用户在Web浏览器中点击链接或提交表单的时候,请求就开始工作了。对请求的工作描述就像是快递投送员。与邮局投递员或FedEx投送员一样,请求会将信息从一个地方带到另一个... 查看详情

spring实战笔记:spring集成

...是客户端应用和服务端之间的会话。    1.Spring通过多种远程调用技术支持RPC(remoteprocedurecall,远程过程调用)RPC模型使用场景RMI不考虑网络限制时(例如防火墙),访问/发布基于Java的服务Hessian或Burlap考虑网络限... 查看详情

springsecurity实战项目笔记

一 认证和授权1.1 认证和授权SpringSecurity基于Spring框架,提供了一套Web应用安全性的完整解决方案。一般来说,Web应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。​用户认证... 查看详情

前方高能预警!阿里大佬出品“spring实战学习笔记”震撼来袭!(代码片段)

Spring框架已经成为Java开发人员的必备知识,而且Spring3引入了强大的新特性,例如SpEL、Spring表达式语言、loC容器的新注解以及用户急需的对REST的支持。无论你是刚刚接触Spring还是被Spring3.0的新特性所吸引,这份笔记... 查看详情

spring实战笔记一

1、是什么?  Spring是一个开源的框架,是为了解决企业级应用开发的复杂性而创建的。   简而言之,Spring是为简化Java开发而创建的。 2、如何简化开发?  为了降低java开发的复杂性,Spring采用了4中关键策略。 ... 查看详情

高质量spring实战学习笔记,腾讯内部学习spring首推

Spring框架已经成为Java开发人员的必备知识,而且Spring3引入了强大的新特性,例如SpEL、Spring表达式语言、loC容器的新注解以及用户急需的对REST的支持。无论你是刚刚接触Spring还是被Spring3.0的新特性所吸引,这份笔记... 查看详情

spring4实战学习笔记

《Spring4实战第4版》2016年4月新出版的,之前的第三版看起来还是不错的,所以看到新版就直接买下来。英文版源码地址:SpringinAction,FourthEditionCoversSpring4 1.IOC装配Bean参考【Spring实战4 2.2】,作者提倡无XML配置化... 查看详情

spring实战读书笔记spring之旅(代码片段)

Spring可以做很多事情,但是这个事情底层都依赖于2个核心特征:依赖注入(DI)和面向切面编程(AOP)概念:POJO:简单java对象,PlainOldJavaObject,在Spring中基本可以等同于javabean为了简化Java... 查看详情

hspspring学习笔记

一、Spring是什么及快速入门案例1、spring纵跨三层spring纵跨web层、业务层、dao层,接管这三层,配置bean,维护bean关系(1)Struts是web框架(jsp/action/actionform)(2)hibernate是orm框架,处于持久层(3)spring是容器框架,用于配置bean... 查看详情

登峰造极迎接实战!绝版spring全家桶阿里高工私享面试进阶笔记,就这还不香?

Spring全家桶Spring框架自从诞生以来就一直备受开发者青睐,它涵盖了Spring、Springboot、SpringCloud等诸多解决方案,一般我们都会统称为Spring全家桶!出于Spring框架在Java开发者心中中的统治地位,所以不管是面试还是... 查看详情

前方高能预警!阿里大佬出品“spring实战学习笔记”震撼来袭

Spring框架已经成为Java开发人员的必备知识,而且Spring3引入了强大的新特性,例如SpEL、Spring表达式语言、loC容器的新注解以及用户急需的对REST的支持。无论你是刚刚接触Spring还是被Spring3.0的新特性所吸引,这份笔记... 查看详情

spring实战读书笔记spring装配bean(代码片段)

...过Xml装配Bean借助构造器注入初始化bean设置属性混合配置Spring容器负责创建应用程序中的bean并通过DI来装配(wiring)他们。Spring有三种装配方式,三种方式可以搭配使用 (1)隐式的bean发现机制和自动装配ÿ... 查看详情

spring实战----源码解析springsecurity4.1.3中的过滤器filter配置(代码片段)

SpringSecurity的底层是通过一系列的Filter来管理的,每个Filter都有其自身的功能,那么这些Filter是怎么配置到系统中的?一、web.xml配置通常web使用会在web.xml中进行如下配置<!--Spring-security--> <filter> <filter-name&g... 查看详情

前方高能预警!阿里大佬出品“spring实战学习笔记”震撼来袭!(代码片段)

Spring框架已经成为Java开发人员的必备知识,而且Spring3引入了强大的新特性,例如SpEL、Spring表达式语言、loC容器的新注解以及用户急需的对REST的支持。无论你是刚刚接触Spring还是被Spring3.0的新特性所吸引,这份笔记... 查看详情