SpringSecurity授权管理介绍

简介: 权限管理的两大核心是:认证和授权,前面我们已经介绍完了认证的内容,本文就给大家来介绍下SpringSecurity的授权管理

权限管理的两大核心是:认证和授权,前面我们已经介绍完了认证的内容,本文就给大家来介绍下SpringSecurity的授权管理


一、注解操作


 我们在控制器或者service中实现授权操作比较理想的方式就是通过相应的注解来实现。SpringSecurity可以通过注解的方式来控制类或者方法的访问权限。注解需要对应的注解支持,若注解放在controller类中,对应注解支持应该放在mvc配置文件中,因为controller类是有mvc配置文件扫描并创建的,同理,注解放在service类中,对应注解支持应该放在spring配置文件中。由于我们现在是模拟业务操作,并没有service业务代码,所以就把注解放在controller类中了。


1.1开启授权的注解支持


 这里给大家演示三类注解,但实际开发中,用一类即可!

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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-4.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.2.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
        http://www.springframework.org/schema/security
        http://www.springframework.org/schema/security/spring-security-4.2.xsd
    ">
    <!-- 配置扫描路径-->
    <context:component-scan base-package="com.dpb.security.controller"
                            use-default-filters="false">
        <context:include-filter type="annotation"
                                expression="org.springframework.stereotype.Controller" />
    </context:component-scan>
    <mvc:annotation-driven></mvc:annotation-driven>
    <!--
        开启权限控制注解支持
            jsr250-annotations="enabled"表示支持jsr250-api的注解,需要jsr250-api的jar包
            pre-post-annotations="enabled"表示支持spring表达式注解
            secured-annotations="enabled"这才是SpringSecurity提供的注解
    -->
    <security:global-method-security jsr250-annotations="enabled"
                                     pre-post-annotations="enabled"
                                     secured-annotations="enabled"
    />
</beans>


1.2在注解支持对应类或者方法上添加注解


创建相关的控制器


0.png

Jsr250注解的使用

<dependency>
  <groupId>javax.annotation</groupId>
  <artifactId>jsr250-api</artifactId>
  <version>1.0</version>
</dependency>

2019120517032046.png


效果

20191205170331860.png


Spring表达式注解使用

2019120517035647.png


效果


20191205170405486.png20191205170409821.png




SpringSecurity提供的注解使用

20191205170428927.png


效果


20191205170440225.png20191205170445615.png



1.3 权限异常处理


 对于没有访问权限的操作,我们直接给一个403的系统错误页面,用户体验也太差了,这时我们可以通过自定义异常处理来解决

自定义错误页面


20191205170507338.png

方式一:在spring-security.xml配置文件中处理



20191205170522923.png20191205170531101.png



方式二:编写通过SpringMVC的异常处理机制


 也可以通过我们在介绍SpringMVC时介绍的5中异常处理方式,此处大家自行完善。


方式三:web.xml文件中设置

<error-page> 
  <error-code>403</error-code> 
  <location>/403.jsp</location> 
</error-page>


二、标签操作


 上面介绍的注解方式可以控制服务器的访问,但是我们在前端页面上也需要把用户没有权限访问的信息给隐藏起来,这时我们需要通过SpringSecurity的标签库来实现,具体如下

<%--
  Created by IntelliJ IDEA.
  User: dengp
  Date: 2019/12/1
  Time: 20:43
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="security"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>home界面</h1><br>
    当前登录账号:<br>
    <security:authentication property="principal.username"/><br>
    <security:authentication property="name"/><br>
    <form action="/logout" method="post">
        <security:csrfInput/>
        <input type="submit"value="注销">
    </form>
    <security:authorize access="hasAnyRole('ROLE_ADMIN')" >
        <a href="#">系统管理</a>
    </security:authorize>
    <security:authorize access="hasAnyRole('ROLE_USER')" >
        <a href="#">用户管理</a>
    </security:authorize>
</body>
</html>


用起来和我们前面介绍shiro的标签库差不多

20191205170641613.png


大家要注意,标签管理仅仅是隐藏了页面,但并没有做权限管理,所以后台权限管理是必须的!


相关文章
|
1月前
|
安全 Java 数据安全/隐私保护
使用Spring Security实现细粒度的权限控制
使用Spring Security实现细粒度的权限控制
|
1月前
|
安全 Java 数据库
实现基于Spring Security的权限管理系统
实现基于Spring Security的权限管理系统
|
1月前
|
安全 Java 数据安全/隐私保护
解析Spring Security中的权限控制策略
解析Spring Security中的权限控制策略
|
2月前
|
JSON 安全 Java
Spring Security 6.x 微信公众平台OAuth2授权实战
上一篇介绍了OAuth2协议的基本原理,以及Spring Security框架中自带的OAuth2客户端GitHub的实现细节,本篇以微信公众号网页授权登录为目的,介绍如何在原框架基础上定制开发OAuth2客户端。
100 4
Spring Security 6.x 微信公众平台OAuth2授权实战
|
2月前
|
存储 安全 Java
Spring Security 6.x OAuth2登录认证源码分析
上一篇介绍了Spring Security框架中身份认证的架构设计,本篇就OAuth2客户端登录认证的实现源码做一些分析。
101 2
Spring Security 6.x OAuth2登录认证源码分析
|
2月前
|
安全 Java 数据安全/隐私保护
Spring Security 6.x 一文快速搞懂配置原理
本文主要对整个Spring Security配置过程做一定的剖析,希望可以对学习Spring Sercurity框架的同学所有帮助。
126 5
Spring Security 6.x 一文快速搞懂配置原理
|
2月前
|
安全 Java API
Spring Security 6.x 图解身份认证的架构设计
【6月更文挑战第1天】本文主要介绍了Spring Security在身份认证方面的架构设计,以及主要业务流程,及核心代码的实现
41 1
Spring Security 6.x 图解身份认证的架构设计
|
1月前
|
安全 Java 数据安全/隐私保护
使用Spring Security实现细粒度的权限控制
使用Spring Security实现细粒度的权限控制
|
1月前
|
安全 Java 数据安全/隐私保护
使用Java和Spring Security实现身份验证与授权
使用Java和Spring Security实现身份验证与授权
|
1月前
|
存储 安全 Java
Spring Security在企业级应用中的应用
Spring Security在企业级应用中的应用