• SpringSecurity


    SpringSecurity

    SpringSecurity简介

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

    重要概念
    ​ 认证
    ​ 是为用户建立一个他所声明的主体。主体一般是指用户,设备或可以在你系 统中执行动作的其他系统。

    ​ 授权
    ​ 指的是一个用户能否在你的应用中执行某个操作,在到达授权判断之前,身份的主题已经由身份验证过程建立了。
    ​ 当前登录用户可以具有哪些权限

    快速入门

    • 创建创建springSecurityPro项目(War工程)
    • 导入SpringSecurity的pom文件
     <properties>
        <spring.version>5.0.2.RELEASE</spring.version>
        <spring.security.version>5.0.1.RELEASE</spring.security.version>
      </properties>
      <dependencies>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context-support</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
          <version>${spring.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-config</artifactId>
          <version>${spring.security.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework.security</groupId>
          <artifactId>spring-security-taglibs</artifactId>
          <version>${spring.security.version}</version>
        </dependency>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.1.0</version>
          <scope>provided</scope>
        </dependency>
      </dependencies>
    
    • 在resources中创建配置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="使用自带的页面"
            use-expressions="是否使用spel表达式",
            如果使用表达式:hasRole('ROLE_USER')
        -->
        <security:http auto-config="true" use-expressions="false">
            <!-- 配置拦截的请求地址,任何请求地址都必须有ROLE_USER的权限 -->
            <security:intercept-url pattern="/**" access="ROLE_USER"/>
        </security:http>
    
        <!-- 配置认证信息 -->
        <security:authentication-manager>
            <!--认证信息的提供者-->
            <security:authentication-provider>
                <!--用户的服务对象-->
                <security:user-service>
                    <!--用户信息, 是临时账号和密码-->
                    <!--noop:不使用加密  authorities:指定用户认证的角色-->
                    <security:user name="admin" password="{noop}admin" authorities="ROLE_USER"/>
                </security:user-service>
            </security:authentication-provider>
        </security:authentication-manager>
    </beans>
    

    参数说明

    auto-config
    	使用自带的页面
    use-expressions
    	是否使用spel表达式
    	如果使用表达式:hasRole('ROLE_USER')
    pattern
    	配置拦截的请求地址
    access
    	可以访问的角色
    noop
    	是否使用加密 
    authorities
    	指定用户认证的角色,要用ROLE_开头
    
    • 配置web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
    
      <!--Spring监听器指定配置文件位置-->
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-security.xml</param-value>
      </context-param>
      <!--创建Spring容器对象-->
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
    
      <!--配置委派代理过滤器: 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>
    
    </web-app>
    

    配置自定义登录页面

    创建login.jsp/error.jsp/success.jsp

    login.jsp

    <h1>登录页面</h1>
    <form action="login" method="post">
    	<table>
    		<tr>
    			<td>用户名:</td>
    			<td><input type="text" name="username"/></td>
    		</tr>
    		<tr>
    			<td>密码:</td>
    			<td><input type="password" name="password"/></td>
    		</tr>
    		<tr>
    			<td colspan="2" align="center">
    				<input type="submit" value="登录"/>
    				<input type="reset" value="重置"/>
    			</td>
    		</tr>
    	</table>
    </form>
    

    error.jsp

    <h1>登录失败</h1>
    

    success.jsp

    success <br>
    <a href="/logout">退出</a>
    

    在spring-security.xml文件中进行配置

    <!-- 不拦截静态资源 -->
    <security:http pattern="/css/**" security="none"/>
    <security:http pattern="/img/**" security="none"/>
    <!-- 配置不拦截指定页面 -->
    <security:http pattern="/login.jsp" security="none"/>
    <security:http pattern="/error.jsp" security="none"/>
    
    
    <!-- 配置默认登录请求页面 -->
    <security:http auto-config="true" use-expressions="false">
    <!-- 配置拦截的请求地址,任何请求地址都必须有ROLE_USER的权限 -->
    <security:intercept-url pattern="/**" access="ROLE_USER"/>
    
    
    <!--
        开启表单验证 
        username-parameter="username" 
        password-parameter="password" 
        login-page			:登录页面名称  以  / 开始
        default-target-url	:登录成功后跳转的页面
        login-processing-url:提交的路径的设置 默认值"/login" 可以修改
    -->
    <security:form-login
    	login-page="/login.jsp"
    	login-processing-url="/login"
    	always-use-default-target="true"
    	default-target-url="/success.jsp"
    	authentication-failure-url="/error.jsp"
    />
    
    <!-- 关闭跨域请求 -->
    <security:csrf disabled="true"/>
    <!-- 退出
    	invalidate-session:是否刷新session
    	logout-url:退出请求地址
    	logout-success-url:退出成功后访问的页面
    -->
    <security:logout invalidate-session="true"
    			 logout-url="/logout"
    			 logout-success-url="/login.html"/>
    </security:http>
    
  • 相关阅读:
    数据库范式
    java String.split()用法
    1.4 IoC控制反转
    利用shrinkwrap锁定依赖版本
    清晨开启电脑自动拉取项目更新
    JS如何获取屏幕、浏览器及网页高度宽度?
    Navigator 对象,能够清楚地知道浏览器的相关信息
    iconfont 转换为图标字体
    VS code的搜索、替换与正则替换
    点九图制作方法
  • 原文地址:https://www.cnblogs.com/mumuyinxin/p/11703705.html
Copyright © 2020-2023  润新知