发布网友 发布时间:2024-10-12 05:07
共1个回答
热心网友 时间:2024-10-24 11:20
我是这样使用SpringBoot(SpringSecurity实现用户登录)大多数项目是需要安全控制的。这章用SpringSecurity实现用户登录功能。
这章新创建一个模块来开发。创建模块参考这里。模块的ArtifactId为bhuser。
下面先写两个页面,需要在pom.xml文件中引入spring-boot-starter-thymeleaf。文件内容:
既然是安全控制,就需要有控制的点。这里写两个Controller,分别是两个界面。到最后的目标是一个界面不需要登录就可以浏览,一个界面需要用户登录后才能浏览。
在包com.biboheart.demos.controller下创建PageController。内容如下:
在sources/templates中创建两个页面,分别是home.html和hello.html
home.html内容如下:
hello.html内容如下:
启动服务后,访问localhost
点击连接“这里”进入hello页面。
现在是没有权限控制的情况下的结果。下面来增加安全控制,使home页面可以访问,hello页面需要用户登录才能访问。
在pom.xml中引入spring-boot-starter-security组件
这时候启动项目,访问首页就会跳转到登录页面了。
这个登录页面是框架提供的。用户名和密码是框架生成的。这样的用户名密码不可控制。接下增加自己的登录认证业务。
创建包com.biboheart.demos.security,安全控制的业务写在这个包下。创建security配置文件SecurityConfiguration,内容:
注意,SpringSecurity5必须配置passwordEncoder。
重启服务,访问localhost
点击连接“这里”,跳转到了login界面
教你如何在SpringBoot中使用RSocketRSocket应用层协议支持ReactiveStreams语义,例如:用RSocket作为HTTP的一种替代方案。在本教程中,我们将看到RSocket用在springboot中,特别是springboot如何帮助抽象出更低级别的RSocketAPI。
让我们从添加spring-boot-starter-rsocket依赖开始:
这个依赖会传递性的拉取RSocket相关的依赖,比如:rsocket-core和rsocket-transport-netty
现在继续我们的简单应用程序。为了突出RSocket提供的交互模式,我打算创建一个交易应用程序,交易应用程序包括客户端和服务器。
3.1.服务器设置
首先,我们设置由springboot应用程序引导的RSocketserver服务器。因为有spring-boot-starter-rsocketdependency依赖,所以springboot会自动配置RSocketserver。跟平常一样,可以用属性驱动的方式修改RSocketserver默认配置值。例如:通过增加如下配置在application.properties中,来修改RSocket端口
也可以根据需要进一步修改服务器的其他属性
3.2.设置客户端
接下来,我们来设置客户端,也是一个springboot应用程序。虽然springboot自动配置大部分RSocket相关的组件,但还要自定义一些对象来完成设置。
这儿我们正在创建RSocket客户端并且配置TCP端口为:7000。注意:该服务端口我们在前面已经配置过。接下来我们定义了一个RSocket的装饰器对象RSocketRequester。这个对象在我们跟RSocketserver交互时会为我们提供帮助。定义这些对象配置后,我们还只是有了一个骨架。在接下来,我们将暴露不同的交互模式,并看看springboot在这个地方提供帮助的。
我们从Request/Response开始,HTTP也使用这种通信方式,这也是最常见的、最相似的交互模式。在这种交互模式里,由客户端初始化通信并发送一个请求。之后,服务器端执行操作并返回一个响应给客户端--这时通信完成。在我们的交易应用程序里,一个客户端询问一个给定的股票的当前的市场数据。作为回复,服务器会传递请求的数据。
4.1.服务器
在服务器这边,我们首先应该创建一个controller来持有我们的处理器方法。我们会使用@MessageMapping注解来代替像SpringMVC中的@RequestMapping或者@GetMapping注解
来研究下我们的控制器。我们将使用@Controller注解来定义一个控制器来处理进入RSocket的请求。另外,注解@MessageMapping让我们定义我们感兴趣的路由和如何响应一个请求。在这个示例中,服务器监听路由currentMarketData,并响应一个单一的结果MonoMarketData给客户端。
4.2.客户端
接下来,我们的RSocket客户端应该询问一只股票的价格并得到一个单一的响应。为了初始化请求,我们该使用RSocketRequester类,如下:
注意:在示例中,RSocket客户端也是一个REST风格的controller,以此来访问我们的RSocket服务器。因此,我们使用@RestController和@GetMapping注解来定义我们的请求/响应端点。在端点方法中,我们使用的是类RSocketRequester并指定了路由。事实上,这个是服务器端RSocket所期望的路由,然后我们传递请求数据。最后,当调用retrieveMono()方法时,springboot会帮我们初始化一个请求/响应交互。
接下来我们将查看FireAndForget交互模式。正如名字提示的一样,客户端发送一个请求给服务器,但是不期望服务器的返回响应回来。在我们的交易程序中,一些客户端会作为数据资源服务,并且推送市场数据给服务器端。
5.1.服务器端
我们来创建另外一个端点在我们的服务器应用程序中,如下:
我们又一次定义了一个新的@MessageMapping路由为collectMarketData。此外,SpringBoot自动转换传入的负载为一个MarketData实例。但是,这儿最大的不同是我们返回一个MonoVoid,因为客户端不需要服务器的返回。
5.2.客户端
来看看我们如何初始化我们的fire-and-forget模式的请求。我们将创建另外一个REST风格的端点,如下:
这儿我们指定路由和负载将是一个MarketData实例。由于我们使用send()方法来代替retrieveMono(),所有交互模式变成了fire-and-forget模式。
请求流是一种更复杂的交互模式,这个模式中客户端发送一个请求,但是在一段时间内从服务器端获取到多个响应。为了模拟这种交互模式,客户端会询问给定股票的所有市场数据。
6.1.服务器端
我们从服务器端开始。我们将添加另外一个消息映射方法,如下:
正如所见,这个处理器方法跟其他的处理器方法非常类似。不同的部分是我们返回一个FluxMarketData来代替MonoMarketData。最后我们的RSocket服务器会返回多个响应给客户端。
6.2.客户端
在客户端这边,我们该创建一个端点来初始化请求/响应通信,如下:
我们来研究下RSocket请求。首先我们定义了路由和请求负载。然后,我们定义了使用retrieveFlux()调用的响应期望。这部分决定了交互模式。另外注意:由于我们的客户端也是REST风格的服务器,客户端也定义了响应媒介类型MediaType.TEXT_EVENT_STREAM_VALUE。
这里我们给异常处理方法标记注解为@MessageExceptionHandler。作为结果,这个方法将处理所有类型的异常,因为Exception是所有其他类型的异常的超类。我们也可以明确地创建更多的不同类型的,不同的异常处理方法。这当然是请求/响应模式,并且我们返回的是MonoMarketData。我们期望这里的响应类型跟我们的交互模式的返回类型相匹配。
SpringBoot开发工具的使用
SpringBoot提供了一套额外的工具,可以提升应用程序开发的体验,只用在项目中包含spring-boot-devtools模块就行。该模块会在开发模式下设置一些默认的属性,例如:禁用缓存、设置日志等级;还会监听classpath的变化,自动的重启应用。
spring-boot-devtools给开发带来了很多的便利,这篇文章总结可它的一些用法。
要使用devtools,需要先添加模块依赖,Maven和Gradle的配置如下:
Maven:
Gradle:
运行完整打包的应用时,开发工具会被禁用。当使用java-jar或者特殊的类加载器运行时,会被认为是生产环境。在Maven中使用optionaltrue/optional标记该依赖时可选的,或者在Gradle中使用自定义的developmentOnly配置可以防止开发工具应用到项目的其他模块。
SpringBoot中的一些库会通过缓存来提升性能。比如:模块引擎缓存已编译的模板,已避免重复解析模板文件;SpringMVC在响应静态资源时设置HTTP缓存头。
启用缓存在开发环境中非常有用,但是在生产环境下却适得其反。因此spring-boot-devtools默认会为我们禁用掉缓存,而不用再去手动禁用了。
同时,开发工具还会将Web日志的等级设置为DEBUG,这样就可以看到更加详细的请求和响应信息。如果要记录所有请求详细信息(包括可能的敏感信息),可以启用spring.http.log-request-details。
如果不想使用默认的配置,可以设置spring.devtools.add-properties为false。
当classpath上的文件发生修改时,使用了spring-boot-devtools的应用会自动重启。在开发过程中,会是一个有用的功能,因为可以快速地看到修改导致的变化。
由于DevTools监视classpath资源,因此触发重新启动的唯一方法是更新classpath。在Eclipse中,默认在修改文件并保存时会自动编译,从而触发classpath更新,而IntelliJ中需要手动构建项目(Build-BuildProject)才行。当然,IntelliJ中也可以设置自动编译,但我觉得没有必要。
Devtools通过两个类加载器来完成重启,对于第三方库等不会发生修改的类,使用base类加载器,用户编辑的类则使用restart类加载器。当应用重启时,restart类加载器会被丢弃然后创建一个新的,这样会加快重启的速度。如果觉得重启不够快,可以考虑使用JRebel,它通过重新载入类来实现热更新。
默认情况下,每次应用程序重新启动时,都会输出条件评估增量的报告。该报告显示了修改应用程序时自动配置的变化,例如:添加或删除Bean以及配置属性。
添加下面的配置可以关闭该日志:
某些资源在更改时不需要触发重启。默认情况下,/META-INF/maven、/META-INF/resources、/resources,/static、/public或/templates中的资源发生修改时不会触发重启(但是会触发livereload,见下文)。
如果想要自定义需要排除的目录,可以通过spring.devtools.restart.exclude属性配置(逗号分隔多个)。如果想要维持默认的配置额外的排除其他目录,可以通过spring.devtools.restart.additional-exclude属性配置。
通过spring.devtools.restart.additional-paths可以配置额外的路径以监听变化。
如果不想使用重启功能,可以通过spring.devtools.restart.enabled属性设置。大多数情况下,直接在application.properties中设置即可。如果想要完全禁用重启,需要在调用SpringApplication.run(…)之前设置spring.devtools.restart.enabledSystem属性为false:
如果使用不断编译已更改文件的IDE,可能更喜欢仅在特定时间触发重新启动。我们可以使用“触发器文件”,这是一个特殊文件,当想要实际触发重新启动检查时必须修改该文件。更改文件只会触发检查,只有在Devtools检测到必须执行某些操作时才会重新启动。触发器文件可以手动更新,也可以使用IDE插件更新。
将spring.devtools.restart.trigger-file属性设为触发文件路径。
spring-boot-devtools模块包含一个嵌入式LiveReload服务器,可用于在资源更改时触发浏览器刷新。浏览器需要安装LiveReload插件。
如果不想启用LiveReload服务器,设置spring.devtools.livereload.enabled属性为false。
一次只能运行一个LiveReload服务器。如果从IDE启动多个应用程序,则只有第一个具有LiveReload功能。
在$HOME目录下创建一个.spring-boot-devtools.properties文件,在里面添加全局的devtools设置。添加到此文件的任何属性都会应用到本机所有使用devtools的SpringBoot应用程序中。
我是这样使用SpringBoot(API传参)springboot中的Controller或者RestController接收参数的方法是一样的。这章目标是对几种常用的传参都写个例子。
创建package:com.biboheart.demos.api,这个包里放置API接口的RestController
在com.biboheart.demos.api包中创建一个class:ParamController。这章的示例都在这个类中进行。
路径中包含参数,这种情况适合与传递一个不能为空值的参数。比如有些应用中,查询某个企业的数据,必须包含企业的编号,就可以在地址里接收这个编号。
在ParamController中增加一个函数PathParam
路径中的参数通过{sn}接收值。
使用名称接收参数比较直观,我用得比较多。不用注解。跟客户端传的参数同名就可以接收到。如下例子中的reqParam
也可以用get传参
上面用参数名称接收值,只要与请求时的名称一致就能接收到参数值。如果需要传递的参数比较多的时候,就不适合一个一个参数写在函数里了,那样很不方便,也容易出错。可以把这些参数写到一个对象里接收。如下例子
创建一个package:com.biboheart.demos.model,创建一个类Person
用Person对象接收参数
虽然这样的方式也能接收get传参,但是因为需要传的参数多了,用get显得不太方便。这里就不测试GET方式请求了。
有的时候,需要接收JSON传参。比如某些服务的调用需要开发一个回调函数接收对方的回调并获得参数值为结果,对方回调回来的值是JSON格式的值,这时候就需要接收JSON传参数了。用RequestBody可以接收到JSON传值。
需要JSON请求才能正确接到值
Spring、SpringMVC、SpringBoot怎么使用,有什么区别啊?Spring、SpringMVC、SpringBoot都是框架~以下都是个人理解的语言说的。
1先说SpringMVC,SpringMVC作用于控制层。代替了以往的struts2.用起来更简单。
起到访问和跳转的作用。
2Spring作用于service层(当有事务的时候),作用于dao层(当需要提供数据源等等操作的时候)。
3.SpringBoot是一种快速启动框架,当你问这个问题是时候,我想你应该学了spring吧
那么spring的配置文件你应该了解吧。web.xml也需要配置吧。如果涉及到mybatis,
mybatis也要配置吧。而SpringBoot通常和maven一起使用,达到不需要配置spring的applicationConetxt.xml和web.xml,快速启动项目。springboot是现在的主流了。
具体如何实现我给你提供个网址自己学习去
网页链接?需要注册,完全免费
Springboot中控制器的使用步骤:
(1)在model层,创建一个Result类,封装code(状态识别码)、msg(提示信息)、data(核心数据)。
(2)在model层,创建一个User实体类。
(3)创建控制器UserController(相当于入口main)。
(1)在resources/static路径下创建一个静态页面view1.html。
(2)在application.properties中添加静态资源映射。
(3)使用springmvc自带的@Controller直接跳转html页面(不带模板引擎的),配合@ResponseBody实现restAPI。
(4)此时配置的静态文件映射不光只针对html页面,还有对图片、css、js等文件的映射。后面将静态文件放置到这个已经配置好的static文件夹下即可。当然也可以自行创建一个文件夹然后再来进行配置。
1、@RestController是对class进行注解,该注解下的所有被@RequestMapping注解的方法最终输出结果都为字符串,不会跳转界面。
2、用@Controller注解的class,若将@RequestMapping注解的方法的返回值类型设置为String,则可以进行界面跳转。案例中是直接跳转html静态页面,所以需要配置静态资源访问映射。
3、在@Controller注解的class中,想输出字符串,可以在@RequestMapping注解的方法上再添加一个@ResponseBody注解。
4、如果在跳转界面的方法上加上了@ResponseBody注解,则不能跳转界面了,而是输出的字符串。
5、Json.cn查看json