我的JAVA笔记之spring security安全框架-配置文件

    技术2024-11-16  14

    我的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注解为控制器类添加权限

    欢迎批评指正

    Processed: 0.032, SQL: 9