Spring Security 的前身是 Acegi Security ,是 Spring 项目组中用来提供安全认证服务的框架。(
https://projects.spring.io/spring-security/
) Spring Security 为基于J2EE企业应用软件提供了全面安全服务。特别是使用领先的J2EE解决方案-Spring框架开发的企业软件项目。人们使用Spring Security有很多种原因,不过通常吸引他们的是在J2EE Servlet规范或EJB规范中找不到典型企业应用场景的解决方案。特别要指出的是他们不能再WAR 或 EAR 级别进行移植。这样,如果你更换服务器环境,就要,在新的目标环境进行大量的工作,对你的应用系统进行重新配置安全。使用Spring Security 解决了这些问题,也为你提供很多有用的,完全可以指定的其他安全特性。安全包括两个主要操作。
1.创建web项目
2.添加依赖
Spring Security依赖:spring-security-config、spring-security-web
(jar包:spring-security-crypto、spring-security-web、spring-security-config、spring-security-core)
Spring Security编译依赖需于Spring的依赖,因此需要添加Spring的相关依赖。(SpringMVC依赖中包含Spring的依赖,只添加SpringMVC的相关依即可)
Springweb依赖:spring-webmvc
JDBC数据库连接依赖:spring-jdbc(这里我用的是Spring自带的)
MyBatis依赖:
MyBatis-Spring依赖:(mybatis和spring的整合)(这个可以省略,后面mybatis需要单独配置)
mysql依赖:
2.编写配置文件
2.1spring-security.xml
添加security约束
xmlns:security="http://www.springframework.org/schema/security" http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
配置自定义页面,并设置此页面不需要过滤(配置的页面任何人都可以访问,没有限制,一般为登录页面,注册页面,错误页面)。
security的核心配置
<security:http auto-config=”true” use-expressions=”false”>
auto-config: 这个是一个自动配置过滤器(Filter)的属性, 设置为true,security框架帮我创建login页面,login处理方法
use-expressions:”是否使用spring 的el表达式”,如果使用表达式true:access=”hasRole(‘ROLE_USER’)
配置拦截的请求地址(写在<security:http></security:http>内部)
pattern=/** 代表拦截所有请求 access=ROLE_USER,即访问的用户必须有ROLE_USER的角色才可访问 ROLE_USER写法,ROLE_自定义,须以ROLE_为前缀, 多个以逗号分割
<security:intercept-url pattern=”/**” access=”ROLE_USER”/>
===========================================================
登录相关配置(不写的话,会使用security默认的登录配置)
username-parameter: 登陆请求中发送过来的用户名称的参数名 password-parameter: 登陆请求中发送过来的密码的参数名 login-processing-url: 登陆请求处理的地址,由security处理,帮我们生成好了 login-page: 配置自定义登陆页面 default-target-url: 登陆成功后默认跳转页面 authentication-failure-url: 登陆失败后跳转的页面 always-use-default-target: 不管原来访问的是哪个页面,登陆成功后都跳转到default-target-url <security:form-login login-page="/login.html" login-processing-url="/login" authentication-failure-url="/failer.html" default-target-url="/success.html" authentication-success-forward-url="/success.html"></security:form-login> =========================================================== 关闭跨域请求限制 <security:csrf disabled="true"/>
===========================================================
退出相关配置
logout-url: 退出请求的处理(servlet) logout-success-url: 退出成功后跳转的页面 invalidate-session: 让session失效 <security:logout logout-url="/logout" logout-success-url="/login.html" invalidate-session="true"/> </security:http>
</security:http>
配置授权信息
配置账号密码,以及该账号的角色信息
其中{noop}表示加密的类型,noop则表示不使用任何加密方式
authorities这个用户所拥有的角色
2.2web.xml
tomcat启动时加载的配置文件
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-security.xml classpath:application.xml</param-value>
</context-param>
监听器
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
拦截器
<filter>
<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>
放行资源(不需要拦截的页面)
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
3.测试(spring-security默认登录页面)