spring security初探

好了,打开idea开始撸代码吧,我就全部使用springboot了。新建一个springboot项目,添加需要的依赖,主要是web、security、mybatis、mysql、jdbc等等,模板引擎使用的spring推荐的thymeleaf,但是自己实在不想写页面….所以都是使用简单的html

新建项目的pom文件如下:

下面是项目的application.properties

关于spring security的配置下面会说到,我们还是按照传统的web开发流程,新建model、dao、service、controller等等,这里就略过不提了。

这里写一个关于我这次项目遇到的一个数据库相关的异常,java.sql.SQLException: Unknown system variable 'query_cache_size',这个异常信息是因为数据库版本和mysql的驱动冲突造成的,因为前段时间我本地数据库出现问题,所以重新安装了一个最新版的mysql8.0.11版本,但是mysql驱动jar使用的是6.0.6,最后换成最新的8.0.11版本就好了。mysql8.0版本和以前5.*有一定差别,使用的时候一定注意。

这里贴一下灯下要访问的controller

好了,启动我们的项目,并访问localhost:8080/user/findOne/1,然后我们看到浏览器输出

为什么没用用户信息,而是一个简单的登录表单??这就是spring security帮我们做了一个权限校验,这是通过一个过滤器链实现的,关于更深的内容,就要多看看文档了,我们这里只是一个入门!这个登录表单的用户名和密码就是我们在application.properties的配置的,输入User:user,Password:123456,这时候我们需要的结果就出来了:

如果不配置的话spring security会给我们提供一个默认的User:user,而password会在控制台输出。现在注释掉用户名和密码的,再启动项目并访问localhost:8080/user/findOne/1。

上面图片就是security产生的一个密码!我们使用这个密码进行登录后,就可以看到用户信息了

接下来我们开始正式的了解一下security,前面的这个例子只是一个权限的校验,实际开发中哪些页面可以给所有人访问,哪些只能登录用户访问,哪些可以给管理源访问等等都可以通过security来进行控制!所以security内容还是很多的。有兴趣的小伙伴可以参考官方的文档地址:https://docs.spring.io/spring-security/site/docs/5.0.6.RELEASE/reference/htmlsingle/#get-spring-security

因为时间和篇幅的问题,这里只做最简单的一个入门吧!springboot依赖于Spring Security的内容协商策略来确定是使用httpBasic还是formLogin的方式。我们如果想自定义配置security相关的内容,可以写一个配置类,这也是spring推荐的方式,就是通过java代码的方式配置相关内容。这里我新建一个SecurityConfig的类,并继承WebSecurityConfigurerAdapter,重写它的三个configure方法,代码如下:

SecurityConfig.java

@EnableWebSecurity表示开启security功能!这里主要学习一下第二种HttpSecurity,所以第二个方法我们需要重写,我们想让user/findOne/1给所有用户访问,那么我们可以修改下configure方法,带买如下:

mvcMatchers()里面可以写多个表达式,这里面写的请求会被直接通过,也就是不需要进行登录,这点和拦截器过滤器都很相像!这里我们配置只要请求方式为“/user/**”的请求全部允许访问!即不需要进行身份校验。

而在实际开发中我们肯定不可能使用security自带的登录页面,那么我们也可以通过loginPage("/登录页面")指定默认的登录页面,以及登录成功后的页面和错误页面,为了简便我就使用默认的登录页面了。我新建一个登录相关的LoginController,以便跳转到相应的页面。

那么我们在修改一下我们的方法:

启动项目再次访问,这里说一下failureForwardUrl这个不指定的是默认的错误url,哪怕是404之类的错误也会跳转到这个错误页面。比如如果我在浏览器输入localhost:8080/user/index,这是一个无效的url,正常情况下如果我们方的话会跳转到一个404的页面,但是实际因为我们配置了失败的跳转地址,所以会跳转到自定义的错误页面

像之前的那样,如果我们访问localhost:8080/user/findOne/1,首先会跳转登录页面,如果输入的用户名或密码错误依然会是自定义的错误页面。

而如果我们第一次请求访问的地址就是localhost:8080/login呢??启动项目,并访问,输入正确的用户名和密码后我们就发现我们跳到了自定义的成功页面。

这里还有一点就是默认成功页面是进行的重定向,而错误页面却是转发,通过上面的图片的地址栏变化我们也能够看得出来。

其实spring security内容很多,我这里只是最简单粗浅的一些内容,用户认证和权限的校验在项目中用的非常多,经常需要给用户的身份和权限进行细致的管理,所以我认为security也是很重要的一块内容,建议多学习一下。

好了,这次的学习就到这里了,如果有什么错误希望大家指正!!!有疑问也欢迎大家讨论!!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180723G0255X00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券