欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

用户登录拦截-----SpringSecurity框架的使用

程序员文章站 2024-03-19 14:13:58
...

1.SpringSecurity框架介绍

Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。

它可以完成什么工作?

  1. 用户登录,未登录拦截,已登录放行,指定什么页面不拦截




2.具体使用

  1. 导包(在web层添加)
<!-- 身份验证 -->
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-web</artifactId>
			<version>4.1.0.RELEASE</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-config</artifactId>
			<version>4.1.0.RELEASE</version>
		</dependency>
  1. 修改web.xml文件(在web层添加)
	<!-- 读取springSecurity的配置文件 -->
  	 <context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring-security.xml</param-value>
	 </context-param>
	 <listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	 </listener>
	 
	<!-- 这是一个过滤器代理类,也是springSecurity的入口,以前我们定义的时候名字都是自定义的随便改,但现在不能改,固定这个名字,不然springSecurity找不到 -->
	 <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>
  1. 书写spring-security.xml配置文件(在web层添加)
    注意页面的标签是 <beans:beans >,与其他页面不同,这个文件也是这个框架的主要配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
	xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	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">
   
	<!-- 设置页面不登陆也可以访问 -->
	<http pattern="/*.html" security="none"></http>
	<http pattern="/css/**" security="none"></http>
	<http pattern="/img/**" security="none"></http>
	<http pattern="/js/**" security="none"></http>
	<http pattern="/plugins/**" security="none"></http>

	<!-- 页面的拦截规则    use-expressions:是否启动SPEL表达式 默认是true -->
	<http use-expressions="false">
		<!-- 当前用户必须有ROLE_USER的角色 才可以访问根目录及所属子目录的资源 -->
		<intercept-url pattern="/**" access="ROLE_ADMIN"/>
		<!-- 开启表单登陆功能 -->
		<!-- login-page:登录页面;   default-target-url:登录成功跳转页面;     authentication-failure-url:登录失败跳转页面   -->
		<!-- always-use-default-target: 每次登陆都跳转到默认的页面(这里的默认页面:default-target-url="/admin/index.html"),不然会跳转到我们访问时被拦截的页面,这种适用于前端,后端不适合-->
		<form-login  login-page="/login.html" default-target-url="/admin/index.html" authentication-failure-url="/login.html" always-use-default-target="true"/>
		<!-- 如果是jsp页面,就不需要加这个,但是我们这里是html页面,所以我们要关闭它 (不写会报错403-->
		<!-- CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,
			通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。 -->
		<csrf disabled="true"/>
		<!-- 默认会拦截<iframe>标签(分区域标签),添加这个即可使其不拦截 -->
		<headers>
			<frame-options policy="SAMEORIGIN"/>
		</headers>
		<!-- 用户退出配置,退户后会自动回到登录页面,自动会生成" /logout ",再到前端注销按钮处配置:href="../logout"../是因为当前是在admin目录下,要返回webapp目录),点一下即可注销用户 -->
		<logout/>
	</http>
	
	<!-- 认证管理器 -->
	<authentication-manager>
		<authentication-provider>
			<user-service>
				<!-- 定义登录账号密码,指定谁使用这个账号密码才能访问,可以添加很多歌 -->
				<user name="admin" password="123456" authorities="ROLE_ADMIN"/>
				<user name="sunwukong" password="dasheng" authorities="ROLE_ADMIN"/>
			</user-service>
		</authentication-provider>	
	</authentication-manager>
		
</beans:beans>
  1. html页面的一些配置

        a.提交页面的 “action” 地址

<!-- action中的提交地址是 SpringSecurity 框架自动给你生成的-->
<form class="sui-form" action="/login" method="post" id="loginform">

        b.注销用户的注销按钮

<div class="pull-right">
	<!--"spring-security.xml" 中的 <logout/> 相对应 -->
	<a href="../logout" class="btn btn-default btn-flat">注销</a>
</div>
相关标签: SpringSecurity