返回顶部
首页 > 资讯 > 后端开发 > Python >SpringSecurity概念及整合ssm框架的示例详解
  • 516
分享到

SpringSecurity概念及整合ssm框架的示例详解

SpringSecurity整合ssm框架SpringSecurity概念 2022-12-16 15:12:30 516人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

基本概念 spring中提供安全认证服务的框架,认证:验证用户密码是否正确的过程,授权:对用户能访问的资源进行控制 用户登录系统时我们协助 SpringSecurity 把用户对应

基本概念

spring中提供安全认证服务的框架,认证:验证用户密码是否正确的过程,授权:对用户能访问的资源进行控制

在这里插入图片描述

用户登录系统时我们协助 SpringSecurity 把用户对应的角色、权限组装好,同时把各个资源所要求的权限信息设定好,剩下的“登录验证”、“权限验证”等等工作都交给SpringSecurity。

权限管理过程中的相关概念

主体

英文单词:principal

使用系统的用户或设备或从其他系统远程登录的用户等等。简单说就是谁使用系统谁就是主体。

认证

英文单词:authentication

权限管理系统确认一个主体的身份,允许主体进入系统。简单说就是“主体”证明自己是谁。笼统的认为就是以前所做的登录操作。

授权

英文单词:authorization

操作系统的“权力”“授予”“主体”,这样主体就具备了操作系统中特定功能的能力。

所以简单来说,授权就是给用户分配权限。

使用

pom文件中加入spring security的依赖

<!-- SpringSecurity 对 WEB 应用进行权限管理 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>4.2.10.RELEASE</version>
</dependency>
<!-- SpringSecurity 配置 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>4.2.10.RELEASE</version>
</dependency>
<!-- SpringSecurity 标签库 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>4.2.10.RELEASE</version>
</dependency>

web.xml加入SpringSecurity控制权限的Filte

    <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>
    @PreAuthorize("hasAuthority('role:get') or hasAnyRole('经理')")// 需要有role:get权限才可以访问
    @ResponseBody
    @GetMapping("/role/get/page/info.JSON")
    public ResultEntity<PageInfo<Role>> getPageInfo(
            @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
            @RequestParam(value = "pageSize", defaultValue = "4") Integer pageSize,
            @RequestParam(value = "keyWord", defaultValue = "") String keyword
    ) {
        // 获取页面数据
        PageInfo<Role> pageInfo = roleService.getRoleByKeyword(pageNum, pageSize, keyword);
        // 如果出现异常,dispatcherServlet会进行处理
        return ResultEntity.successWithData(pageInfo);
    }

@PostAuthorize

先执行方法然后根据方法返回值判断是否具备权限。

例如:查询一个 Admin 对象,在@PostAuthorize 注解中和当前登录的 Admin 对象进行比较,如果不一致,则判断为不能访问。实现“只能查自己”效果。

@PostAuthorize("returnObject.data.loginAcct == principal.username")

使用 returnObject 获取到方法返回值,使用 principal 获取到当前登录用户的主体对象。

通过故意写错表达式,然后从异常信息中发现表达式访问的是下面这个类的属性:

org.springframework.security.access.expression.method.MethodSecurityExpressionRoot

@PreFilter

在方法执行前对传入的参数进行过滤。只能对集合类型的数据进行过滤。

@PreFilter(value="filterObject%2==0")
@ResponseBody
@RequestMapping("/admin/test/pre/filter")
public ResultEntity<List<Integer>> saveList(@RequestBody List<Integer> valueList) {
return ResultEntity.successWithData(valueList);
}

@PostFilter

在方法执行后对方法返回值进行过滤。只能对集合类型的数据进行过滤。

CrowdUserDetailsService

其实返回的就是SpringSecurity的User对象,只是做了一层封装。

package com.atguigu.crowd.mvc.config;

import com.atguigu.crowd.entity.Admin;
import com.atguigu.crowd.entity.Role;
import com.atguigu.crowd.service.api.AdminService;
import com.atguigu.crowd.service.api.AuthService;
import com.atguigu.crowd.service.api.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@Component
public class CrowdUserDetailsService implements UserDetailsService {
    @Autowired
    private AdminService adminService;
    @Autowired
    private RoleService roleService;
    @Autowired
    private AuthService authService;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // 1、根据账号名称查找Admin对象
        Admin admin = adminService.getAdminByLoginAcct(username);
        // 2、获取adminId
        Integer adminId = admin.getId();
        // 3、根据adminId查询角色信息
        List<Role> roles = roleService.getAssignedRole(adminId);
        // 4、根据adminId查询权限名字信息
        List<String> auths = authService.getAssignedAuthNameByAdminId(adminId);
        // 5、创建集合对象来存储GrantedAuthority
        ArrayList<GrantedAuthority> authorities = new ArrayList<>();
        // 6、遍历存入角色消息
        for (int i = 0; i < roles.size(); i++) {
            // 需要加前缀,因为SpringSecurity就是通过ROLE_来区分是角色还是权限
            String roleName = "ROLE_" + roles.get(i).getName();
            SimpleGrantedAuthority authority = new SimpleGrantedAuthority(roleName);
            authorities.add(authority);
        }
        // 7、遍历存入权限信息
        for (int i = 0; i < auths.size(); i++) {
            String authName = auths.get(i);
            SimpleGrantedAuthority authority = new SimpleGrantedAuthority(authName);
            authorities.add(authority);
        }
        // 8、封装到SecurityAdmin对象中,它继承了SpringSecurity的User类
        SecurityAdmin securityAdmin = new SecurityAdmin(admin, authorities);
        return securityAdmin;
    }
}

BCryptPasswordEncoder

它是SpringSecurity自带的密码加密与验证的类。

页面元素控制

取出当前登录对象

<%--需要导入taglib--%>
<%@ taglib uri="Http://www.springframework.org/security/tags" prefix="security" %>
<%--principal 是我们自己封装的 SecurityAdmin 对象(返回的SpringSecurity的User对象)--%>
<security:authentication property="principal.originalAdmin.userName"/>

标签库控制

<%--需要导入taglib--%>
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="security" %>
<security:authorize access="hasRole('经理')">
    <!-- 开始和结束标签之间是要进行权限控制的部分。检测当前用户是否有权限,有权限
    就显示这里的内容,没有权限就不显示。 --> ……
</security:authorize>

access属性可以传入权限控制相关的表达式。

/>

### 标签库控制

```html
<%--需要导入taglib--%>
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="security" %>
<security:authorize access="hasRole('经理')">
    <!-- 开始和结束标签之间是要进行权限控制的部分。检测当前用户是否有权限,有权限
    就显示这里的内容,没有权限就不显示。 --> ……
</security:authorize>

access属性可以传入权限控制相关的表达式。

到此这篇关于SpringSecurity概念以及整合SSM框架的文章就介绍到这了,更多相关SpringSecurity整合ssm框架内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringSecurity概念及整合ssm框架的示例详解

本文链接: https://lsjlt.com/news/175091.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringSecurity概念及整合ssm框架的示例详解
    基本概念 Spring中提供安全认证服务的框架,认证:验证用户密码是否正确的过程,授权:对用户能访问的资源进行控制 用户登录系统时我们协助 SpringSecurity 把用户对应...
    99+
    2022-12-16
    SpringSecurity整合ssm框架 SpringSecurity概念
  • SpringMVC 整合SSM框架详解
    整合SSM 环境要求 环境: IDEA MySQL5.7.19 Tomcat9 Maven3.6 要求: 需要熟练掌握MySQL数据库,Spr...
    99+
    2024-04-02
  • IDEA SSM框架整合配置及步骤详解
    目录参考前言SSM框架整合步骤MybatisSpringSpring MVC层一些杂七杂八的配置参考 狂神说SpringMVC05:整合SSM框架 https://mp.weixin...
    99+
    2024-04-02
  • SSM框架整合之Spring+SpringMVC+MyBatis的示例分析
    这篇文章主要介绍了SSM框架整合之Spring+SpringMVC+MyBatis的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、基本概念1.1、SpringSp...
    99+
    2023-06-15
  • SSM框架整合JSP中集成easyui前端ui项目开发示例详解
    目录前言EasyUI下载与配置页面美化运行结果总结与问题前言 前端的UI框架很多,如bootsrap、layui、easyui等,这些框架提供了大量控件供开发人员使用,我们无需花费太...
    99+
    2024-04-02
  • 集合框架(Collections Framework)详解及代码示例
    简介集合和数组的区别:数组存储基础数据类型,且每一个数组都只能存储一种数据类型的数据,空间不可变。集合存储对象,一个集合中可以存储多种类型的对象。空间可变。严格地说,集合是存储对象的引用,每个对象都称为集合的元素。根据存储时数据结构的不同,...
    99+
    2023-05-30
    java 集合框架 fram
  • java框架整合的示例分析
    java框架整合的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。框架整合:Springmvc + Mybatis + Shiro(权限) + REST(服务) + We...
    99+
    2023-06-05
  • IDEA + Maven环境下的SSM框架整合及搭建过程
    目录0、开发工具一、Maven安装配置二、Maven配置阿里云镜像源三、Idea + Maven搭建项目骨架说明:本文记录如何在Idea下,利用Maven管理项目,并整合SSM(Sp...
    99+
    2024-04-02
  • SpringBoot框架整合SwaggerUI的示例代码
    整合swagger进行模块测试 注意事项:为方便SpringBoot更好的整合Swagger,需要专门放置在一个模块中(maven子工程) 创建公共模块,整合swagger,为了所有...
    99+
    2024-04-02
  • Java集合框架LinkedList详解及实例
    Java集合框架LinkedList详解LinkedList定义package java.util;public class LinkedList<E> extends AbstractSequentialList<E&g...
    99+
    2023-05-31
    java linkedlist ava
  • 详解SSH框架和Redis的整合
    一个已有的Struts+Spring+Hibernate项目,以前使用MySQL数据库,现在想把Redis也整合进去。 1. 相关Jar文件 下载并导入以下3个Jar文件: commons-pool2-2....
    99+
    2022-06-04
    详解 框架 SSH
  • SSH+Jquery+Ajax框架整合的示例分析
    这篇文章将为大家详细讲解有关SSH+Jquery+Ajax框架整合的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。想要的效果:登录页面点击提交后 进行后台的验证;...
    99+
    2024-04-02
  • SSM框架下结合log4j、slf4j打印日志的示例分析
    这篇文章主要介绍SSM框架下结合log4j、slf4j打印日志的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:首先加入log4j和slf4j的jar包 <!-- 日志处理&...
    99+
    2023-05-30
    log4j ssm slf4j
  • golang内存对齐的概念及案例详解
    什么是内存对齐 为保证程序顺利高效的运行,编译器会把各种类型的数据安排到合适的地址,并占用合适的长度,这就是内存对齐。 每种类型的对齐值就是它的对齐边界,内存对齐要求数据存储地址以及...
    99+
    2024-04-02
  • Spring Data JPA框架的核心概念与Repository接口详解
    目录1 核心概念CrudRepository接口PagingAndSortingRepository接口2 查询方法3 后续内容介绍1 核心概念 Spring Data存储库抽象的中...
    99+
    2024-04-02
  • SpringBoot整合Druid、Redis的示例详解
    目录1.整合Druid1.1Druid简介1.2添加上 Druid 数据源依赖1.3使用Druid 数据源 2.整合redis2.1添加上 redis依赖2.2yml添加r...
    99+
    2024-04-02
  • SpringMVC框架整合Junit进行单元测试(案例详解)
    本文主要介绍在SpringMVC框架整合Junit框架进行单元测试。闲话少述,让我们直入主题。 系统环境 软件 ...
    99+
    2024-04-02
  • SpringBoot整合Security实现权限控制框架(案例详解)
    目录一、前言二、环境准备2.1、数据库表2.2、导入依赖2.3、配置文件2.4、WebSecurityConfig Security的主要配置类:2.5、Security身份验证2....
    99+
    2024-04-02
  • 详解SpringMVC中拦截器的概念及入门案例
    目录一、拦截器概念二、拦截器入门案例一、拦截器概念 拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行 作用: 在指定的方法...
    99+
    2024-04-02
  • SpringBoot框架中的@Conditional注解示例详解
    目录1. @Conditional 注解2. Spring boot 扩展1) @ConditionalOnClass和@ConditionalOnMissingClass注解2) ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作