我的JAVA笔记之spring security安全框架-配置文件
先上代码:spring-security.xml配置文件
<?xml version
="1.0" encoding
="UTF-8"?>
<beans xmlns
="http://www.springframework.org/schema/beans"
xmlns
:xsi
="http://www.w3.org/2001/XMLSchema-instance"
xmlns
:security
="http://www.springframework.org/schema/security"
xsi
:schemaLocation
="http
://www
.springframework
.org
/schema
/beans
http
://www
.springframework
.org
/schema
/beans
/spring
-beans
.xsd http
://www
.springframework
.org
/schema
/security http
://www
.springframework
.org
/schema
/security
/spring
-security
.xsd"
>
<!--授权
-->
<!--资源放行
: 登录页面,静态资源
-->
<!--对
/favicon
.ico 资源放行
-->
<security
:http pattern
="/favicon.ico" security
="none"></security
:http
>
<!--拦截规则配置
-->
<!--
http:用于定义相关权限控制
auto
-config:是否自动配置
设置为
true时框架会提供默认的一些配置,例如提供默认的登录页面、登出处理等
设置为
false时需要显示提供登录表单配置,否则会报错
use
-expressions:用于指定intercept
-url中的access属性是否使用表达式
-->
<security
:http auto
-config
="true" use
-expressions
="true">
<!--
intercept
-url:定义一个拦截规则
pattern:对哪些url进行权限控制
access:在请求对应的URL时需要什么权限,默认配置时它应该是一个以逗号分隔的角色列表,
请求的用户只需拥有其中的一个角色就能成功访问对应的URL
-->
<!--<security
:intercept
-url pattern
="/**" access
="ROLE_ADMIN" />-->
<!--登录配置
-->
<!--
login
-page
: 登录页面
login
-processing
-url
: 登录的请求路径
, 跟表单保持一致
, 必须以
/ 开头
authentication
-success
-forward
-url
: 认证成功后访问的请求
, 必须以
/ 开头
authentication
-failure
-forward
-url
:认证失败后访问的请求
, 必须以
/ 开头
password
-parameter
:表单中的提交密码参数名
(默认是password
)
username
-parameter
:表单中的提交用户名参数名
(默认是username
)
默认匹配的话就不用写
,否则必写
-->
<security
:form
-login
login
-page
="http://localhost:83/login.html"
login
-processing
-url
="/user/login.do"
authentication
-success
-forward
-url
="/user/loginSuccess.do"
authentication
-failure
-forward
-url
="/user/loginFail.do"
username
-parameter
="username"
password
-parameter
="password"></security
:form
-login
>
<!--退出配置
-->
<!--
logout:退出登录
logout
-url:退出登录操作对应的请求路径
logout
-success
-url:退出登录后的跳转页面
-->
<security
:logout
invalidate
-session
="true"
logout
-success
-url
="http://localhost:83/login.html"
logout
-url
="/logout.do"></security
:logout
>
<!--关闭跨站请求伪造
-->
<security
:csrf disabled
="true"></security
:csrf
>
</security
:http
>
<!--创建 UserDetailsService 接口的实现类
-->
<bean id
="userService" class="com.itheima.security.SecurityConfigUserService"></bean
>
<!--认证
-->
<!--认证管理器
-->
<security
:authentication
-manager
>
<!--认证信息的提供者
: user
-service
-ref 关联用户服务对象(提供账户信息的)
-->
<security
:authentication
-provider user
-service
-ref
="userService">
<!--指定 加密工具类
-->
<security
:password
-encoder ref
="passwordEncoder"></security
:password
-encoder
>
</security
:authentication
-provider
>
</security
:authentication
-manager
>
<bean id
="passwordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"></bean
>
<!--开启注解控制权限
-->
<!--
pre
-post
-annotations
="enabled" : @PreAuthorize(方法执行前校验
) @PostAuthorize(方法执行后校验)
,两个注解可用
-->
<security
:global
-method
-security pre
-post
-annotations
="enabled"></security
:global
-method
-security
>
</beans
>
pom文件
<dependency>
<groupId>org
.springframework
.security
</groupId
>
<artifactId>spring
-security
-web
</artifactId
>
<version>5.0.5.RELEASE
</version
>
</dependency
>
<dependency>
<groupId>org
.springframework
.security
</groupId
>
<artifactId>spring
-security
-config
</artifactId
>
<version>5.0.5.RELEASE
</version
>
</dependency
>
主观理解:
配置文件中首先要进行认证与授权
认证:系统提供的用于识别用户身份的功能,通常提供用户名和密码进行登录其实就是在进行认证,认证的目的是让系统知道你是谁。
授权:用户认证成功后,需要为用户授权,其实就是指定当前用户可以操作哪些功能。
简单的说认证就是系统知道你的身份(你是谁),授权就是根据你的身份(认证后)授予你对应的权限(你能干啥)
认证要用到<security:authentication-manager>标签(认证管理器),上面说了认证的大概意思了,所以你要在该标签内提供信息让系统来认证知道你是谁,所以要有<security:authentication-provider>标签(认证的提供者),<security:password-encoder>标签指定密码加密工具类
授权这里就是进行一些配置,资源放行,拦截规则,登录配置,登出配置(代码中的注释已经解释的比较清楚了)
<security:global-method-security>标签(开启直接权限控制),开启之后就可以再Controller中使用@PreAuthorize注解为控制器类添加权限
欢迎批评指正