SpringSecurity的简单理解和入门

此项目是基于普通的web项目进行搭建的SpringSecurity入门环境,如果需要SpringBoot项目的SpringSecurity入门案例可以去看这个SpringSecurity基于SpringBoot的简单环境搭建

前提

搭建之前先搞清楚两个词语,虽然在这次案例中没有完全体现出来。
认证:通过用户名和密码成功登录系统后,让系统得到单签用户的角色身份。
授权:系统根据当前用户的角色,给其授予对应可以操作的权限资源。

概念

SpringSecurity是Spring采用了AOP的思想,基于servlet过滤器实现的安全框架,它提供了完善的的认证机制和方法级的授权功能。

简单实现

  1. 导入jar包
    需要的jar包有4个:spring-security-core.jar,spring-security-web.jar,spring-security-config.jar和spring-security-taglibs.jar4个jar包
包名作用
spring-security-core.jar核心包,springsecurity的任何功能都需要这个jar包
spring-security-web.jarweb工程必备的包,包含过滤器和相关的web安全基础结构代码
spring-security-config.jar用于解析xml配置文件,SpringSecurity的xml配置文件解析用的就是这个包
spring-security-taglibs.jarSpringSecurity提供的动态标签库,JSP页面也可以使用
  1. 配置web.xml文件
  <!--SpringSecurity核心过滤器链-->
    <!--springSecurityFilterChain这个变量名不能修改-->
    <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. SpringSecurity的配置
<?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:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        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/context
			    http://www.springframework.org/schema/context/spring-context.xsd
			    http://www.springframework.org/schema/aop
			    http://www.springframework.org/schema/aop/spring-aop.xsd
			    http://www.springframework.org/schema/tx
			    http://www.springframework.org/schema/tx/spring-tx.xsd
			    http://www.springframework.org/schema/mvc
			    http://www.springframework.org/schema/mvc/spring-mvc.xsd
                http://www.springframework.org/schema/security
			    http://www.springframework.org/schema/security/spring-security.xsd">

    <!--释放静态资源:这一部分资源可以说是脱离的SpringSecurity-->
    <security:http pattern="/css/**" security="none"/>
    <security:http pattern="/img/**" security="none"/> 
    <security:http pattern="/plugins/**" security="none"/>
    <security:http pattern="/failer.jsp" security="none"/>
    <!--配置springSecurity-->
    <!--
    auto-config="true"  表示自动加载springsecurity的配置文件
    use-expressions="true" 表示使用spring的el表达式来配置springsecurity
    -->
    <security:http auto-config="true" use-expressions="true">
        <!--让认证页面可以匿名访问-->
        <security:intercept-url pattern="/login.jsp" access="permitAll()"/>
        <!--拦截资源-->
        <!--
	        pattern="/**" 表示拦截所有资源
	        access="hasAnyRole('ROLE_USER')" 表示只有ROLE_USER角色才能访问资源
        -->
        <security:intercept-url pattern="/**" access="hasAnyRole('ROLE_USER')"/>
        <!--配置认证信息-->
        <security:form-login login-page="/login.jsp"
                             login-processing-url="/login"
                             default-target-url="/index.jsp"
                             authentication-failure-url="/failer.jsp"/>
        <!--配置退出登录信息,请求方式必须是post-->
        <security:logout logout-url="/logout"
                         logout-success-url="/login.jsp"/>
        <!--去掉csrf拦截的过滤器:不关闭且没配置token而且还是'GET','HEAD','TRACE','OPTIONS'的话已有异域请求问题导致报错-->
        <!--<security:csrf disabled="true"/>-->
    </security:http>

    <!--把加密对象放入的IOC容器中-->
    <bean id="passwordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>

    <!--设置Spring Security认证用户信息的来源-->
    <!--
    	springsecurity默认的认证必须是加密的,加上{noop}表示不加密认证,这里是用了写死的账号密码和角色。
    -->
    <security:authentication-manager>
	        <security:authentication-provider>
	        	<security:user-service>
	        		<security:user name="user" password="{noop}user" authorities="ROLE_USER"/>
	        		<security:user name="admin" password="{noop}admin" authorities="ROLE_ADMIN"/>
	        	</security:user-service>
	        </security:authentication-provider>
	    </security:authentication-manager>
    <!--下面是动态从数据库中获取登录的验证和角色的赋予,实际上就是交给了一个实现了特定UserDetailsService接口的userservice接口来实现-->
    <!--
	    <security:authentication-manager>
	        <security:authentication-provider user-service-ref="userServiceImpl">
	            <security:password-encoder ref="passwordEncoder"/>
	        </security:authentication-provider>
	    </security:authentication-manager>
	 -->
</beans>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值