SpringSecurity入门以及配置详解

1.Spring Security介绍:Spring Security 的前身是 Acegi Security ,是 Spring 项目组中用来提供安全认证服务的框架。安全包括两个主要操作:

(1)“认证”,是为用户建立一个他所声明的主体。主题一般式指用户,设备或可以在你系 统中执行动作的其他系统。

(2)“授权”指的是一个用户能否在你的应用中执行某个操作,在到达授权判断之前,身份的主题已经由 身份验证过程建立了。

2.在pom.xml导入spring security的依赖:

<spring.security.version>5.0.1.RELEASE</spring.security.version>
<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-core</artifactId>
    <version>${spring.security.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-taglibs</artifactId>
    <version>${spring.security.version}</version>
</dependency>

3.在web.xml中创建filter

<!-- 配置加载类路径的配置文件,添加spring-security.xml -->
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath*:applicationContext.xml,classpath*:spring-security.xml</param-value>
</context-param>
<!-- spring-security的配置-->
<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>

4.在resource资源目录下创建spring-security.xml。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:security="http://www.springframework.org/schema/security"
       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">

   <!--auto-config="true"配置为我们自动默认提供一个登陆窗口,用户也可以设置使用自己的页面-->
 <security:http auto-config="true" use-expressions="false"> 
       <!--对所有的请求资源进行拦截,除非具有ROLE_USER的角色项目测试的时候,用user登陆可以成功
        但是用admin登陆页面出现403权限不足的问题,因为这里没有设置admin角色-->
       <security:intercept-url pattern="/**" access="ROLE_USER" />
 </security:http>

<!--配置了两个用户,一个用户是user,密码也是user,另外一个用户是admin,密码也是admin-->
<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>
</beans>

5.启动项目测试,发现页面上出现了一个登陆窗口,这个登陆窗口在整个工程中没有,因为spring security默认为我提供了一个登陆窗口,登陆成功默认访问的是index.jsp,用户可以设置使用自己的登陆页面,登陆成功跳到那个页面,失败跳到哪个页面,首先在WEB-INFO下书写自己的登陆,成功,失败页面,在spring-security.xml进行添加:

<!-- 配置不拦截的资源 -->
<security:http pattern="/login.jsp" security="none"/>
<security:http pattern="/failer.jsp" security="none"/>
<security:http pattern="/css/**" security="none"/>
<security:http pattern="/img/**" security="none"/>
<security:http pattern="/plugins/**" security="none"/>
<security:http auto-config="true" use-expressions="true">
    <!-- 配置具体的拦截的规则 pattern="请求路径的规则" access="访问系统的人,必须有ROLE_USER的角色" -->
    <security:intercept-url pattern="/**" access="hasAnyRole('ROLE_USER','ROLE_ADMIN')"/>

    <!-- 定义跳转的具体的页面 -->
    <security:form-login
            login-page="/login.jsp"
            login-processing-url="/login.do"
            default-target-url="/index.jsp"
            authentication-failure-url="/failer.jsp"
            authentication-success-forward-url="/pages/main.jsp"
    />

    <!-- 关闭跨域请求 -->
    <security:csrf disabled="true"/>

</security:http>

发布了20 篇原创文章 · 获赞 33 · 访问量 2789

猜你喜欢

转载自blog.csdn.net/qq_39182939/article/details/104576494