Interceptor中使用@Autowired获取的值为null

在自定义的HandlerInterceptor中使用@Autowired注入用户服务后,获取其值后发现为null

public class AuthenticationInterceptor implements HandlerInterceptor {
    @Autowired
    private UserService userService;
}

原因是在注册AuthenticationInterceptor时使用的是new关键字,没有将其交给Spring进行管理

 @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //  授权拦截
        registry.addInterceptor(new AuthenticationInterceptor()).addPathPatterns("/**")
                .excludePathPatterns("/login/**","/logout","/chat");
    }

那么我们只需要将我们的拦截器交给Spring进行管理

首先在AuthenticationInterceptor上加上@Component注解

@Component
public class AuthenticationInterceptor implements HandlerInterceptor {
    @Autowired
    private UserService userService;
}

然后在我们的web配置类中注入这个对象,然后用这个对象替换之前用new关键字创建的对象即可

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Autowired
    private AuthenticationInterceptor authenticationInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //  授权拦截
        registry.addInterceptor(authenticationInterceptor).addPathPatterns("/**")
                .excludePathPatterns("/login/**","/logout","/chat");
    }
}

也可以使用@Bean注解,这样就不需要在AuthenticationInterceptor 上加@Component注解了

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Bean
    public AuthenticationInterceptor getAuthenticationInterceptor() {
        return new AuthenticationInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //  授权拦截
        registry.addInterceptor(getAuthenticationInterceptor()).addPathPatterns("/**")
                .excludePathPatterns("/login/**","/logout","/chat");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用Camunda的Java API获取Task时,可能会遇到Task为null的情况。这通常是由于缺少正确的认证导致的。下面以MySQL数据库为例,详细解释认证问题并提供Java代码。 在Camunda,用户验证可以通过配置身份验证插件来实现。如果没有正确的身份验证配置,Camunda将无法识别用户并验证他们是否有权访问特定的任务。因此,我们需要确保在访问任务之前,正确地配置了Camunda身份验证。 下面是一个基本的认证配置示例,用于使用MySQL数据库的Camunda实例: ```java package com.example.camunda.config; import org.camunda.bpm.engine.IdentityService; import org.camunda.bpm.engine.ProcessEngine; import org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl; import org.camunda.bpm.engine.impl.interceptor.SessionFactory; import org.camunda.bpm.engine.impl.persistence.StrongUuidGenerator; import org.camunda.bpm.engine.spring.SpringProcessEngineConfiguration; import org.camunda.bpm.spring.boot.starter.configuration.CamundaConfiguration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; import java.util.ArrayList; import java.util.List; @Configuration @CamundaConfiguration public class CamundaConfig { @Autowired private DataSource dataSource; @Bean public ProcessEngineConfigurationImpl processEngineConfigurationImpl() { SpringProcessEngineConfiguration config = new SpringProcessEngineConfiguration(); config.setDataSource(dataSource); config.setDatabaseSchemaUpdate("true"); config.setJobExecutorActivate(true); // configure identity service config.setIdentityService(identityService()); // configure session factories List<SessionFactory> sessionFactories = new ArrayList<>(); sessionFactories.add(identityProviderSessionFactory()); config.setCustomSessionFactories(sessionFactories); // configure id generator config.setIdGenerator(new StrongUuidGenerator()); return config; } @Bean public ProcessEngine processEngine() { return processEngineConfigurationImpl().buildProcessEngine(); } @Bean public IdentityService identityService() { return processEngineConfigurationImpl().getIdentityService(); } @Bean public IdentityProviderSessionFactory identityProviderSessionFactory() { return new IdentityProviderSessionFactory(); } } ``` 在上述配置,我们配置了Camunda的基本配置,包括数据源、数据库架构更新、作业执行器激活等。特别地,我们还配置了身份验证服务和自定义的SessionFactory,以确保正确的身份验证。 下面是一个简单的Java代码片段,用于获取MySQL数据库的任务: ```java package com.example.camunda.service; import org.camunda.bpm.engine.TaskService; import org.camunda.bpm.engine.task.Task; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class CamundaTaskService { @Autowired private TaskService taskService; public List<Task> getTasks() { return taskService.createTaskQuery().list(); } } ``` 在上述代码,我们注入了TaskService,并使用taskService.createTaskQuery()方法创建任务查询,然后调用list()方法获取任务列表。 请注意,此代码片段假定您已正确配置了Camunda身份验证。如果您没有正确配置身份验证,您将无法获取任务并且将获得null。 希望这个示例能够帮助您理解Camunda的身份验证和任务获取

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值