Springboot2.1.6集成activiti7出现登录验证的实现

一、问题

Spring2.1.5集成activiti7.1.24时访问要输入用户名和密码。

 @Autowired
  private ProcessRuntime processRuntime;

/**
   * 启动任务
   */
  @Test
  void startProcess(){
    /**
     * 流程变量
     *  给<userTask id="请假申请" name="请假申请" activiti:assignee="#{student}"></userTask>
     *   的student赋值
     */

    HashMap<String, Object> variables = new HashMap<>();

    // String username = SecurityUtils.getNickName();
    String username = "小王";
    variables.put("staff", username);

    ProcessInstance processInstance = processRuntime.start(ProcessPayloadBuilder
        .start()
        .withProcessDefinitionKey("baoxiao")
        .withName("报销测试")
        //.withBusinessKey(id)
        // .withVariable("deptLeader", join)
        .withVariables(variables)
        .build());

    System.out.println(processInstance.getId());
  }

在单元测试中测试Activiti框架,出现如下的异常:

org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext

at org.springframework.security.access.intercept.AbstractSecurityInterceptor.credentialsNotFound(AbstractSecurityInterceptor.java:379)
at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:223)
at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:65)
...
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)

其余的方式大家如果试过成功就可以了,如果不行,可试下这个:取消登录验证如下:

@SpringBootApplication(
    exclude = {
        org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
        org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class
    }
)

这是我在别人那找来的,困了我好长时间,知道看到这个东西。

二、新版验证

其实这个都很简单,但是我看了不少博客下的评论都说按照这个方式剔除了,但是还是不行

An Authentication object was not found in the SecurityContext

当我们自信的对着接口发起请求的时候,报了浏览器出现了500,控制台报出上面的异常,中文意思:在SecurityContext中没有找到身份验证对象

why? 我明明已经剔除了啊,为什么还是要验证身份?

到底是哪里出了问题?想不明白!

如果上上面的问题,你只需要使用,老的API即可,因为新封装的API使用SpringSecurity,所以需要身份验证

注意:以下均是个人理解,如有错误,还请指正

其实,当我们使用Activiti7的时候,要知道Activit7的开发团队,不在是之前Tom Baeyens的团队负责开发,也就是下面这个哥们。

Activiti7中,重新封装了一些新的API,比如ProcessRuntime和TaskRuntime

既然是新封装的,那一定和老的API会有所区别,那具体区别在哪里呢?

我们可以直接查看这两个接口里面的内容,去一探究竟!

@Autowired
  private ProcessRuntime processRuntime;

我这里拿ProcessRuntime举例,我们可以直接查看下,找到实现的类

或者直接使用快捷键 CTRL + H ,找出实现的类

进入实现类中:

进入实现类中,我们可以看到类上面使用:

@PreAuthorize("hasRole('ACTIVITI_USER')")

这个是什么?

SpringSecurity用来在方法调用前或者调用后进行权限检查

说到这里,您应该明白了吧!因为Activiti7中封装出来的新接口,都加了这个注解,所以当我们即使照着最开始的方法剔除了,仍然还会出现身份认证问题!

那为什么我们调用老的接口,却不需要身份验证呢,其实不用开源码就可以推出,老的接口上并没有添加该注解

我们可以看看老的接口 RuntimeService 的实现类:

  @Autowired
  private RuntimeService runtimeService;

所以,我们可以使用 RuntimeService 来代替 ProcessRuntime 启动实例。

单元测试实例:

package com.example.demo;

import com.ruoyi.RuoYiApplication;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.runtime.ProcessInstance;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.HashMap;

@RunWith(SpringRunner.class)

@SpringBootTest(classes = RuoYiApplication.class)
public class DemoApplicationTests {

  // Activiti7 新接口由于内置SpringSecurity,在运行时会报错
  // @Autowired
  // private ProcessRuntime processRuntime;

  // 老的接口方法,未内置 SpringSecurity
  @Autowired
  private RuntimeService runtimeService;

  @Test
  void contextLoads() {
    System.out.println("hello world");
  }

  /**
   * 在使用 SpringBoot + Activiti 时,启动服务访问模块时,浏览器会弹出一个登录界面。
   *
   * 这是因为Activiti 框架整合了SpringSecurity框架,如果我们不需要安全验证时可以禁用springsecurity。
   *
   *
   * @SpringBootApplication(
   *     exclude = {
   *         org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
   *         org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class
   *     })
   */
  /**
   * 启动任务
   */
  @Test
  void startProcess(){
    /**
     * 流程变量
     *  给<userTask id="请假申请" name="请假申请" activiti:assignee="#{student}"></userTask>
     *   的student赋值
     */

    HashMap<String, Object> variables = new HashMap<>();

    // String username = SecurityUtils.getNickName();
    String username = "小王";
    variables.put("staff", username);

    /*
    ProcessInstance processInstance = processRuntime.start(ProcessPayloadBuilder
        .start()
        .withProcessDefinitionKey("baoxiao")
        .withName("报销测试")
        //.withBusinessKey(id)
        // .withVariable("deptLeader", join)
        .withVariables(variables)
        .build());
     */

    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("baoxiao", variables);
    System.out.println("流程实例启动:");
    System.out.println(processInstance.getId());
  }

}

结果打印:

流程实例启动:
b0af0810-4801-11eb-b1ac-005056c00001

可以看到使用老接口,就可以成功执行了。

相关文章:

SpringBoot2.x整合Activiti7后,禁用SpringBootSecurity问题

到此这篇关于Springboot2.1.6集成activiti7出现登录验证的实现的文章就介绍到这了,更多相关Springboot activiti7登录验证内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot + SpringSecurity 短信验证码登录功能实现

    实现原理 在之前的文章中,我们介绍了普通的帐号密码登录的方式: SpringBoot + Spring Security 基本使用及个性化登录配置. 但是现在还有一种常见的方式,就是直接通过手机短信验证码登录,这里就需要自己来做一些额外的工作了. 对SpringSecurity认证流程详解有一定了解的都知道,在帐号密码认证的过程中,涉及到了以下几个类:UsernamePasswordAuthenticationFilter(用于请求参数获取),UsernamePasswordAuthentica

  • SpringBoot登录验证码实现过程详解

    今天记录一下验证码的实现,希望能够帮助到大家! 首先我们看一下实现的效果: 此验证码的实现没有用到太多的插件,话不多说直接上代码,大家拿过去就可以用. 中间用到了org.apache.commons.lang3.RandomUtils工具类,需要pom配置: <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> <dependency> <groupId>org.apac

  • Google Kaptcha 框架实现登录验证码功能(SSM 和 SpringBoot)

    一.效果图: 二.导入 jar 包 1.由于这是大神写好封装起来的一个框架,所有我们使用前得先下载相关的 jar 包 第一种:maven <!-- 验证码 --> <!-- https://mvnrepository.com/artifact/com.github.penggle/kaptcha --> <dependency>     <groupId>com.github.penggle</groupId>     <artifactI

  • springboot实现拦截器之验证登录示例

    整理文档,搜刮出一个springboot实现拦截器之验证登录示例,稍微整理精简一下做下分享. 添加jar包,这个jar包不是必须的,只是在拦截器里用到了,如果不用的话,完全可以不引入 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.5</version> </dep

  • springboot结合全局异常处理实现登录注册验证

    在学校做一个校企合作项目,注册登录这一块需要对注册登录进行输入合法的服务器端验证,因为是前后端分离开发,所以要求返回JSON数据. 方法有很多,这觉得用全局异常处理比较容易上手 全局异常处理 首先来创建一个sprIngboot的web项目或模块,目录结构如下 实体类User.java @Data public class User { private String userName; private String passwold; } 实体类UserResult.java 把数据封装到这里返回

  • Springboot实现验证码登录

    本文实例为大家分享了Springboot实现验证码登录的具体代码,供大家参考,具体内容如下 因为在项目中需要使用到验证码,我总结一下在项目中如何快速解决项目需求~验证码,下面推荐给大家速上手验证码的例子. 一.编写验证码工具类 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.FileOutputStr

  • SpringBoot基于SpringSecurity表单登录和权限验证的示例

    一.简介 上篇介绍了一个自己做的管理系统,最近空闲的时间自己在继续做,把之前登录时候自定义的拦截器过滤器换成了基于SpringSecurity来做,其中遇到了很多坑,总结下,大家有遇到类似问题的话就当是为大家闭坑吧. 二.项目实现功能和成果展示 首先来看下登录界面:这是我输入的一个正确的信息,点击登录后SpringSecurity会根据你输入的用户名和密码去验证是否正确,如果正确的话就去你定义的页面,我这里定义的是查询教师信息页面.来看下代码吧. 三.准备工作(前台页面.实体类) 实体类Teac

  • SpringBoot Security前后端分离登录验证的实现

    最近一段时间在研究OAuth2的使用,想整个单点登录,从网上找了很多demo都没有实施成功,也许是因为压根就不懂OAuth2的原理导致.有那么几天,越来越没有头绪,又不能放弃,转过头来一想,OAuth2是在Security的基础上扩展的,对于Security自己都是一无所知,干脆就先研究一下Security吧,先把Security搭建起来,找找感觉. 说干就干,在现成的SpringBoot 2.1.4.RELEASE环境下,进行Security的使用. 简单的Security的使用就不说了,目前

  • SpringBoot使用JWT实现登录验证的方法示例

    什么是JWT JSON Web Token(JWT)是一个开放的标准(RFC 7519),它定义了一个紧凑且自包含的方式,用于在各方之间以JSON对象安全地传输信息.这些信息可以通过数字签名进行验证和信任.可以使用秘密(使用HMAC算法)或使用RSA的公钥/私钥对来对JWT进行签名. 具体的jwt介绍可以查看官网的介绍:https://jwt.io/introduction/ jwt请求流程 引用官网的图片 中文介绍: 用户使用账号和面发出post请求: 服务器使用私钥创建一个jwt: 服务器返

  • Springboot2.1.6集成activiti7出现登录验证的实现

    一.问题 Spring2.1.5集成activiti7.1.24时访问要输入用户名和密码. @Autowired private ProcessRuntime processRuntime; /** * 启动任务 */ @Test void startProcess(){ /** * 流程变量 * 给<userTask id="请假申请" name="请假申请" activiti:assignee="#{student}"></

  • SpringBoot集成JWT实现token验证的流程

    JWT官网: https://jwt.io/ JWT(Java版)的github地址:https://github.com/jwtk/jjwt 什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).定义了一种简洁的,自包含的方法用于通信双方之间以JSON对象的形式安全的传递信息.因为数字签名的存在,这些信息是可信的,JWT可以使用HMAC算法或者是RSA的公私秘钥对进行签名. JWT请求流程 1. 用户使

  • Express + Session 实现登录验证功能

    1. 写在前面 当我们登录了一个网站,在没有退出登录的情况下,我们关闭了这个网站 ,过一段时间,再次打开这个网站,依然还会是登录状态.这是因为,当我们登录了一个网站,服务器会保存我们的登录状态,直到我们退出登录,或者保存的登录状态过期.那服务器是通过什么存储我们的登录状态的呢? 答案就是 Session ,服务通过 Session 能够记录每个客户端连接的状态.关于 Session 的原理,在这就不多说了,本文主要介绍在 Express 框架中,如何使用 Session 来实现用户登录身份验证.

  • 解析SpringSecurity自定义登录验证成功与失败的结果处理问题

    一.需要自定义登录结果的场景 在我之前的文章中,做过登录验证流程的源码解析.其中比较重要的就是 当我们登录成功的时候,是由AuthenticationSuccessHandler进行登录结果处理,默认跳转到defaultSuccessUrl配置的路径对应的资源页面(一般是首页index.html). 当我们登录失败的时候,是由AuthenticationfailureHandler进行登录结果处理,默认跳转到failureUrl配置的路径对应的资源页面(一般是登录页login.html). 但是

  • 实战SpringBoot集成JWT实现token验证

    目录 环境搭建 1.新建一个SpringBoot项目Jwt-Demo,引入项目后面需要用到的jar包 2.数据库结构 3.配置文件application.properties 4.Entity包下新建一个User类 5.Dao包下新建一个UserDao 6.Service包下新建一个USerService 7.UseService的实现类UserServiceImp 8.controller包下新建一个UserController 9.在resource文件夹下新建一个Usermapper文件

  • Spring boot security权限管理集成cas单点登录功能的实现

    目录 1.Springboot集成Springsecurity 2.部署CASserver 3.配置CASclient 挣扎了两周,Spring security的cas终于搞出来了,废话不多说,开篇! 1.Spring boot集成Spring security 本篇是使用spring security集成cas,因此,先得集成spring security新建一个Spring boot项目,加入maven依赖,我这里是用的架构是Spring boot2.0.4+Spring mvc+Spri

  • SpringBoot集成JWT实现登陆验证的方法详解

    1:首先,我们需要在项目中导入两个依赖: <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.10.3</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifa

  • SpringBoot登录验证token拦截器的实现

    目录 注解定义 token生成与验证 拦截器定义 拦截器配置定义 拦截器的方法执行类 注解使用 返回值-全局异常类定义 各种测试 不传token 制造可行的假token 伪造token测试 拓展:从请求中获取token 参考文章: 用户访问接口验证,如果用户没有登录,则不让他访问除登录外的任何接口. 实现思路: 1.前端登录,后端创建token(通过JWT这个依赖),返给前端 2.前端访问其他接口,传递token,后端判断token存在以或失效 3.失效或不存在,则返回失效提示,前端根据接口返回

  • ASP.NET Core中实现用户登录验证的最低配置示例代码

    前言 本文主要给大家介绍了关于ASP.NET Core用户登录验证的最低配置的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 背景是在一个项目中增加临时登录功能,只需验证用户是否登录即可,所需的最低配置与实现代码如下. 方法如下: 在 Startup 的 ConfigureServices() 方法中添加 Authentication 的配置: services.AddAuthentication(options => { options.DefaultAuthenti

  • PHP通过session id 实现session共享和登录验证的代码

    先说说,这个机制的用途吧,到现在为止战地知道这个机制有两个方面的用途: 首先,多服务器共享session问题,这个大家应该都能够理解的,当一个网站的用户量过大,就会使用服务器集群,例如专门有一个登录用的服务器.用户通过登录服务器登录之后,登录服务器保存了用户的登录信息session,而其他受访问的服务器,例如电影服务器没有这个session,那么我们就要通过一个session的唯一标识来共享这个session了--具体session的共享超出了本文的范围,请自行查阅资料. 第二个用途就是,验证同

随机推荐