Spring Security入门
2020-07-26 本文已影响0人
8奈文摩尔8
Security入门
创建maven工程,设置packaging设置为war
<!-- 安全框架 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>${spring.security.version}</version>
</dependency>
配置web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<filter>
<!--
DelegatingFilterProxy用于整合第三方框架
整合Spring Security时过滤器的名称必须为springSecurityFilterChain,
否则会抛出NoSuchBeanDefinitionException异常
-->
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-security.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
创建配置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">
<!--
【重要】【重要】【重要】
这里面的所有路径必须以/开头,否则启动报错
-->
<!-- auto-config: 自动配置,自动生成login页面,login处理,退出处理
use-expressions: 是否使用spel表达式 true: access的值可以填表达式(hasRole, hasAuthority, hasAny....)
false: ROEL_角色名(必须是ROLE_打,否则启动报错), 或 security写死的几个常量
-->
<!-- 拦截规则配置 -->
<security:http auto-config="true" use-expressions="false">
<!-- pattern="/**" 拦截所有的路径 access="ROLE_ADMIN"
要访问符合pattern的url时,登陆用户必须有ROLE_ADMIN的角色,如果没有则不能访问
security:intercept-url: 可以配置多个
-->
<security:intercept-url pattern="/**" access="ROLE_ADMIN"/>
</security:http>
<!-- 认证管理器 -->
<security:authentication-manager>
<!-- 认证信息提供者,认证信息的来源
提供登陆用户信息 用户名、密码、权限集合
user-service-ref 指向spring容器中一个bean对象, 实现这个UserDetailsService的对象, 提供用户的名称、密码、权限集合
一旦配置了user-service-ref,就不要配置security:user-service
-->
<security:authentication-provider>
<!-- 登陆用户信息由我们自己来提供 -->
<security:user-service>
<!-- security:user 硬编码一个用户对象在内存中,就不需要去查询数据库了
将来应该使用从数据库查询
name: 登陆的用户名 password:登陆的密码
authorities: 指定的权限(既可以是角色名也可以权限名) authorities与上面access一致才能访问
{noop}使用的是明文,no operation 不要对密码做处理
-->
<security:user name="admin" password="{noop}admin" authorities="ROLE_ADMIN"/>
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
</beans>