项目结构:
自上而下分别为:
①父模块,主要负责项目管理、版本控制;
②后期为springSecurity加入手机验证登录等功能时使用;
③面向浏览器所做的配置,如集群中session的处理;
④security核心文件都在这里存放;
⑤具体业务。引入了③的配置,刚开始学,先从面向浏览器③开始。
在引入了相关依赖和插件之后,在⑤中写一个hello spring security:
此时在地址栏输入:localhost:8080/hello之后,会弹出spring security的安全验证界面。因为是刚开始学,先关闭这个安全验证窗口,后续随着深入学习后在开启。在resources目录下创建application.properties文件,加上下行代码:
这时再重新启动后输入地址便可正常访问了。至此,hello spring security变写完了。
接下来看什么是Restful编程,因为后续的学习中都会使用到Restful风格来编写代码,所以在这里简要介绍下:
我们为了查询数据库中的某条用户数据,传统的URL会这样写:localhost:8080/user/queryUser?userID=1。Restful风格:localhost:8080/user/1。这样看上去是不是比较清秀?眉清目秀......你可能会问,在地址栏中你只传入了一个数字1,那我怎么知道你是想查询一个userID为1的用户呢,还是想从数据库中删除一个userID为1的用户呢?很好。我们知道,请求方法有很多种,比如get、post、put等,采用Restful风格,用URL来描述资源,而不是行为。将根据请求方式的不同来判别具体目的是啥。
先简单知道这些就足够了。接着看一个查询请求。目录结构如下:
User bean声明了username和password字段,UserController中处理请求,代码如下:
先不要管被注释掉的@JsonView注解,下面会介绍到。可以看到这是很简单的一个controller,下面我们编写测试方法:
测试执行成功后,输出到控制台的数据为:
上半部分是controller里输出的url请求时的参数信息。
最后一行是测试方法中输出的controller方法返回值信息。可以看到,我们在controller里向List集合中添加了三个对象,并且这三个对象中的属性都为空,符合我们在测试方法中的预期结果。测试正确。
接下来将要介绍到的有:@PathVariable注解、@JsonView注解与URL正则表达式访问控制。
先看@PathVariable注解。这个注解在Restful风格中应该是很常见的,具体使用如下:
测试方法的编写:
在本测试方法中,我们通过GET方式请求路径为“/user/1”的资源,并期望返回值中包含username为kevin的属性。通过前面的介绍我们知道,GET用于发送查询请求。所以在这里,我们就是想要查询userID为1的用户信息。当请求路径为“/user/2”时,就是查询userID为2的用户信息,这就是注解@PathVariable的作用。这很好的体现了Restful设计风格(它并不是一种约束)。
接下来介绍通过正则表达式来控制对URL的访问。我们知道,例如手机号、年龄等信息,都是数字形式,我们并不希望接收到非预期信息。在以下代码中,接收的ID必须为数字:
此时如果访问“localhost:8080/user/a”,则会抛出404错误。这只是一个简单的正则表达式,你可以利用更复杂的正则表达式来自定义控制。
最后介绍@JsonView注解。这个注解很有意思,它可以根据视图来决定哪些信息是可以返回至前端,哪些信息是被拦截不能返回到前端页面的。
要想使用@JsonView注解功能,分三步走:
①:在bean中声明视图接口,我是在User bean中声明的。
②:在字段的get方法上指定视图名。
③:在controller的方法上指定要渲染的视图。
分别执行测试方法,得到的测试结果如下,可以很明显的看出第一个测试执行后只返回了username信息,而第二个测试执行后则返回了username、age的信息。
第一个测试结果:[{"username":null},{"username":null},{"username":null}]
第二个测试结果:{"username":"kevin","age":null}