开发者学堂课程【Spring Security知识精讲与实战演示(三):集中式整合之搭建Springboot环境】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/732/detail/13058
集中式整合之搭建Springboot环境
SpringSecurity与SpringBoot的初步整合
在初步整合中,不使用自定义的jsp也页面,也不使用数据库。
首先创建工程,先在本地创建一个工程,再在这个空的工程下面创建一个新的项目,不一定都要创建project,可以创建module,只要代码完整就可以,也是一个新的项目。
在这里不能创建project,如果创建就会形成一个新的窗口,这里最好创建的项目都在一个文件夹下,所以选择创建module。
这里需要创建的是一个Maven工程,所以选择Maven。GroupId是公司和组织的名称(com.itheima),项目名以所用到的技术点命名,只写主要的技术名,如这里写springboot_security_jsp,然后点击下一步,点击finish,工程创建完成。
接下来在工程中导入SpringBoot相关的jar包,版本是2.1.3。
程序:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
第一段程序:一般使用springboot都会使用复工程,好处是以后再使用springboot的其它包的时候,就不需要再指定版本号,以后使用的版本都默认和复工程使用的版本一样。
relativePath的作用是:以后再寻找springboot的jar包的时候,从中央仓库找而不是在本地找,如果没联网的话,还是从本地找的,官网要求是加上这一句,尽量加上,不加也没有影响。
第二段程序:springboot中只要出现starter就说明当前这个系统中具有启动器,springboot有自身的tomcat插件,本身就可以使用springboot集成的tomcat插件来启动项目,如果要启动就必须带有启动器。
Web说明只要导了这样的一个包,就说明当前的项目中已经具备了web环境,通俗来说就是当前项目中已经具备了springmvc环境,虽然没有做springmvc的jar包的导入,也没有做任何springmvc相关的配置,但此时已经具备了springmvc相关环境。
这时再去创建一个配置文件,虽然这个时候配置文件中没有必要的点,但是后续会用到,所以先创建出来。
文件命名为application.yml,在这里要指定一个端口号,port:8080,在集中式项目中端口号指定不指定都无所谓,不指定就默认8080,
指定的话指定什么就是什么;一般情况下,分布式是要求必须要指定的,因为分布式启动的项目不止一个,多个端口号如果一样,可能会出现jar包冲突。
配置文件制定完成之后,指定启动类,命名
com.itheima.SpringSecu
rityApplication,在启动类上,需要增加一个注解SpringBootAppli
cation,在启动类内部写一个main方法,public static void main,再在里面写SpringApplication.run,在里面写参数SpringSecurity
Application.class,args,到此,启动类创建完成。
启动类完整程序:
package com. itheima;
import org. springframework.boot. SpringApplication;
import org.springframework.boot. autoconfigure.
SpringBootApplication;
@SpringBootApplication
public class SpringSecurityApplication
public static void main(String[] args){
SpringApplication.run(SpringSecurityApplication.class, args);
}}
启动类创建完成之后,如果想测试一下这个环境通不通,可以选一个测试的处理器,可以在com.itheima的这个包的基础上再创建一个子包叫controller.ProductController,即创建一个产品的controller,这是一个处理器类,需要将对象放入容器,所以要加上一个注解,这里加一个controller注解。
接下来写一个副路径RequestMapping(“/product”),按道理是要将业务层方法注入到controller对象中,但是这里只是一个测试的demo,没有业务层,所以这里不需要注入service。
接下来来写处理器,首先是public String findALL(尝试所有),里面加一个@RequestMapping,可以写路径也可以不写,这样的话只需要访问副路径就可以访问当前处理器。
接下来直接写return“success”,此时需要注意,如果程序写成这样,return要寻找的是名字为success的页面,这样写是找不到的。所以可以暂时不让处理器访问这样一个页面,可以先返回一个数据,就需要将字符名称返回成一个字符串,即不返回页面只返回一个数据,只要在处理器方法上加一个ResponseBody就可以了。
也可以将这个注解加到类上,加到类上的话,所有的处理器都会变成返回数据而不是跳转页面,当前只需要这一个处理器返回数据,那么将注解加到这个处理器的方法上即可。
测试完整程序:
import org. springframework. stereotype. Controller;
import org.springframework. web.bind.
annotation.Request/appin
import org. springframework. web.bind. annotation. ResponseBody;
@Controller
@Requestiapping("/product”)
public class ProductController {
@RequestMapping
@ResponseBody
public String findA11(){
return "success";
}}
此时,springboot的环境就已经搭建好了,此时并没有加入权限相关的一些内容,这个时候这个处理器应该是可以正常访问的。
测试:
启动当前项目,直接使用springboot内置的启动类直接启动。
启动完成后,打开浏览器,输入localhost:8080/product,然后回车。这样就正常访问到了处理器,此时并没有加入任何权限和相关的内容,所以必然是可以正常访问的。