SpringSecurity安全框架一

本文介绍了Spring Security,这是一个用于企业级应用的声明式安全访问控制框架,它利用Spring的IoC和AOP功能提供安全控制。文章详细阐述了认证(数据库验证信息)和授权(权限判断)的概念,并引导读者入门,包括导入安全依赖和两种配置方式:XML配置与注解配置。通过创建SecurityConfiguration类和使用@EnableWebSecurity注解,文章展示了如何初始化并控制应用的安全设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.springSecurity简介

Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作
a:认证:其实就是从数据库中是否可以查到该信息
b:授权:有没有权限登录或者执行某个操作

2.基础入门

2.1.导入spring-security依赖

<!--spring-security开始-->
<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-web</artifactId>
    <version>${spring.security.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-taglibs</artifactId>
    <version>${spring.security.version}</version>
</dependency>
<!--spring-security结束-->

2.2 配置spring-security
2.2.1 基于xml配置

spring-security.xml 
!-- 不拦截的资源文件,-静态资源放行,登陆页面,favicon.ico图标等->
    <security:http pattern="favicon.ico" security="none"/>
    <security:http pattern="/login.jsp" security="none"/>
    <security:http pattern="/css/**" security="none"/>

    <!--
        配置拦截的规则
        auto-config="使用自带的页面"
        use-expressions="是否使用spel表达式",如果使用表达式:hasRole('ROLE_USER')
 	<security:http auto-config="true" use-expressions="true">
             <!-- 配置拦截的请求地址,任何请求地址都必须有ROLE_USER的权限 -->
             <security:intercept-url pattern="/**" access="hasRole('ROLE_USER')"/>
         </security:http>
    -->
    <security:http auto-config="true" use-expressions="false">
        <!-- 配置拦截的请求地址,任何请求地址都必须有ROLE_USER(与下文的认证管理器中的相对应)的权限 -->
        <security:intercept-url pattern="/**" access="ROLE_USER"/>
        <!-- 配置具体的页面跳转 -->
        <!--
            login-page="/login.jsp"    登陆页面
            default-target-url="/success.jsp"   //登陆成功之后去的页面
            authentication-failure-url="/error.jsp"    //登陆失败之后去的页面
            login-processing-url="/login"    //访问登陆页面的路径
        -->
        <security:form-login login-page="/login.jsp"
                             default-target-url="/index.jsp"
                             authentication-failure-url="/failer.jsp"
                             login-processing-url="/login"/>
        <!-- 关闭跨站请求伪造(Cross-site request forgery) -->
        <security:csrf disabled="true"></security:csrf>
        <!-- 退出 -->
        <security:logout invalidate-session="true" logout-url="/logout" logout-success-url="/login.jsp"/>
    </security:http>

    <!-- 配置认证信息,认证管理器 -->
    <!-- 在内存中临时提供用户名和密码的数据 -->
    <security:authentication-manager>
        <!--认证信息的提供者-关联用户服务对象,提供账号和密码-->
        <security:authentication-provider  >
        如果使用实时数据,那么以下的内容就不需要了,只需要关联yoghurt服务对象,提供账号及密码就好,这句话{{{user-service-ref="userServiceImpl"}}}添加到认证信息标签内即可
       	   <!--用户的服务对象-->
            <!--<security:user-service>-->
                <!--
                用户信息,是临时的账号和密码
                {noop}不使用加密
                authorities:指定用户的认证角色
	      -->
                <!--<security:user name="admin" password="{noop}admin" authorities="ROLE_USER"/>-->
            <!--</security:user-service>-->
        </security:authentication-provider>
    </security:authentication-manager>
    web.xml
   <context-param>
    	<param-name>contextConfigLocation</param-name>
    	<param-value>classpath:spring-security.xml</param-value>   
   </context-param>
   <!--配置委派代理过滤器: filter-name必须是: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>

2.2.2 基于注解配置
a:第一步是要创建Spring Security的Java 配置类
b:创建类SecurityConfiguration继承WebSecurityConfigurerAdapter,来对我们应用中所有的安全相关的事项(所有url,验证用户名密码,表单重定向等)进行控制。
SecurityConfiguration.java

package com.itheima.controller;

import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
/**
 * <li>security config</li>
 */
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter{

    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

    /**
     * 配置user-detail服务
     * @param auth
     * @throws Exception
     */
    @Override
    public void configure(AuthenticationManagerBuilder auth)throws Exception{

    }

    /**
     * 拦截请求
     * @param http
     * @throws Exception
     */
    @Override
    public void configure(HttpSecurity http)throws Exception{

    }

    /**
     * 拦截请求
     * @param web
     * @throws Exception
     */
    @Override
    public void configure(WebSecurity web) throws Exception {

    }
}

WebSecurityConfigurerAdapter共有三个configure方法。

public void configure(WebSecurity web) 通过重载,配置Spring Security的Filter链
public void configure(HttpSecurity http) 通过重载,配置如何通过拦截器保护请求
public void configure(AuthenticationManagerBuilder auth) 通过重载,配置user-detail服务

@EnableWebSecurity 注解将会启用Web安全功能。
c:初始化springSecurityFilter注册类,这里使用的方法是继承类AbstractSecurityWebApplicationInitializer

import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;
/**
 * <li>注册springSecurityFilter</li>
 */
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer
{ }

下篇文章讲述springsecurity用户存储认证方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值