Autowired members must be defined in valid Spring bean (@Component|@Service|...)

这篇具有很好参考价值的文章主要介绍了Autowired members must be defined in valid Spring bean (@Component|@Service|...)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

package com.imooc.mall.filter;

import com.imooc.mall.common.ApiRestResponse;
import com.imooc.mall.common.Constant;
import com.imooc.mall.exception.ImoocMallExceptionEnum;
import com.imooc.mall.model.pojo.Category;
import com.imooc.mall.model.pojo.User;
import com.imooc.mall.service.UserService;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import javax.servlet.http.HttpSession;

import com.imooc.mall.service.impl.UserServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 描述:     管理员校验过滤器
 */

public class AdminFilter implements Filter {

    @Autowired
    UserService userService;


    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
            FilterChain filterChain) throws IOException, ServletException {
        System.out.println("执行了一次自定义的AdminFilter过滤器");

        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpSession session = request.getSession();
        User currentUser = (User) session.getAttribute(Constant.IMOOC_MALL_USER);
        if (currentUser == null) {
            PrintWriter out = new HttpServletResponseWrapper(
                    (HttpServletResponse) servletResponse).getWriter();
            out.write("{\n"
                    + "    \"status\": 10007,\n"
                    + "    \"msg\": \"NEED_LOGIN\",\n"
                    + "    \"data\": null\n"
                    + "}");
            out.flush();
            out.close();
            return;
        }
        //校验是否是管理员
        boolean adminRole = userService.checkAdminRole(currentUser);
        if (adminRole) {
            filterChain.doFilter(servletRequest, servletResponse);
        } else {
            PrintWriter out = new HttpServletResponseWrapper(
                    (HttpServletResponse) servletResponse).getWriter();
            out.write("{\n"
                    + "    \"status\": 10009,\n"
                    + "    \"msg\": \"NEED_ADMIN\",\n"
                    + "    \"data\": null\n"
                    + "}");
            out.flush();
            out.close();
        }
    }

    @Override
    public void destroy() {

    }
}

可以过滤未登录的用户请求,但是

Autowired members must be defined in valid Spring bean (@Component|@Service|...),生鲜电商,spring,servlet,java
Autowired members must be defined in valid Spring bean (@Component|@Service|...),生鲜电商,spring,servlet,java
但是无法进一步验证管理员身份(这里我用管理员号登录了)
Autowired members must be defined in valid Spring bean (@Component|@Service|...),生鲜电商,spring,servlet,java
Autowired members must be defined in valid Spring bean (@Component|@Service|...),生鲜电商,spring,servlet,java
定位到AdminFilter中的问题
在AdminFilter中使用了Bean自动注入
Autowired members must be defined in valid Spring bean (@Component|@Service|...),生鲜电商,spring,servlet,java
Autowired members must be defined in valid Spring bean (@Component|@Service|...),生鲜电商,spring,servlet,java
Autowired members must be defined in valid Spring bean (@Component|@Service|...),生鲜电商,spring,servlet,java
自动注入对象必须定义在有效的spring bean内,即需要将AdminFilter定义为bean,才能在该类中注入其他bean。
Autowired members must be defined in valid Spring bean (@Component|@Service|...),生鲜电商,spring,servlet,java
但是将AdminFilter定义为bean后,他会拦截所有的请求。。。
Autowired members must be defined in valid Spring bean (@Component|@Service|...),生鲜电商,spring,servlet,java
Autowired members must be defined in valid Spring bean (@Component|@Service|...),生鲜电商,spring,servlet,java
正确修改方式:
Autowired members must be defined in valid Spring bean (@Component|@Service|...),生鲜电商,spring,servlet,java

未登录前
Autowired members must be defined in valid Spring bean (@Component|@Service|...),生鲜电商,spring,servlet,java
登录了普通用户
Autowired members must be defined in valid Spring bean (@Component|@Service|...),生鲜电商,spring,servlet,java

登录了管理员用户
Autowired members must be defined in valid Spring bean (@Component|@Service|...),生鲜电商,spring,servlet,java文章来源地址https://www.toymoban.com/news/detail-607556.html

到了这里,关于Autowired members must be defined in valid Spring bean (@Component|@Service|...)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 杂记——4.书写spring时出现的Error creating bean with name ‘user0‘ defined in file错误

    目录 1.问题描述 2.情况描述: 3. 解决方法 4. 问题原因  当我们运行一个spring程序时,出现下图的错误: 重点语句:  Error creating bean with name \\\'user011\\\' defined in file [D:地址]:   Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDef

    2024年02月13日
    浏览(46)
  • Error: Header name must be a valid HTTP token [“授权“]

    使用SpringSecurity和OAuth时出现的问题   postman一直报错: 原因:postman使用的是汉化版本  当选择为 Basic Auth时 自动生成的头对应的key和value为: 授权: Basic + base编码      导致header中key为中文 发送失败 解决方法:  1 (推荐) 不使用汉化的postman 2 不用在Basic Auth中输入 账号和密码 直

    2024年02月11日
    浏览(28)
  • MySQL 建表报错:Incorrect table definition; there can be only one auto column and it must be defined as a

    示例 :表中有两个列,id、real_id,id 列只想作为记录的序号存储(如需要保持排序的记录),real_id 列则是记录真正的主键。所以将 id 列设为自增列,方便,不需要程序控制序号递增。建表语句如下: 现象 :建表报错,报错信息: Incorrect table definition; there can be only one aut

    2024年02月13日
    浏览(36)
  • Mysql建表报错:Incorrect table definition; there can be only one auto column and it must be defined as a

    报错:          Incorrect table definition; there can be only one auto column and it must be defined as a key. 原因:         建表语句错误,表中只能包含一个自增列,且该列必须为键。问题是虽然这个表设置了其它主键,但是报错的建表语句中没有把自增列设为键导致的。

    2024年02月15日
    浏览(43)
  • Unity解决动画不可用:The AnimationClip ‘XXX‘ used by the Animation component ‘XXX‘ must be marked as Legacy.

    在Unity 2019.4.38.f1c1以上的版本,创建的创建Animation Clip无法使用,作为组件的默认Clip的话,那么游戏运行的时候这个Clip其实是播不出来的,而且Console会报一条 “The AnimationClip ‘XXX’ used by the Animation component ‘XXX’ must be marked as Legacy.” 的警告信息,以及一条 “Default clip co

    2023年04月08日
    浏览(38)
  • vue3中404页面显示问题Catch all routes (“*“) must now be defined using a param with a custom regexp.

    目录 项目场景:vue3,路由,404页面 问题描述 原因分析: 解决方案: 使用/:pathMatch(.*)或者/:catchAll(.*) 此图片用来封面引流的,前面不看都行,解决方案,点我点我 vue3项目中404页面的显示 Catch all routes (\\\"*\\\") must now be defined using a param with a custom regexp. 当访问url时,访问没有配置的路由时

    2024年02月15日
    浏览(23)
  • A component required a bean of type ‘...Mapper‘ that could not be found问题解决

    错误如图 第一步 查看配置文件是否正确 第二步 查看标签是否正确 检查UserMapper上是否加上@Mapper 补充 第二步还是不行的话查看下POM文件是否导入mybatis-plus-boot-starter 配置mybatis-plus.mapper-locations无提示信息; 此时发现右上角出现感叹号,Cannot resolve configuration property ‘mybatis-

    2024年02月16日
    浏览(31)
  • A component required a bean of type ‘XXX‘ that could not be found 解决办法

    问题如图: 字面意思很容易就能看出,该问题是由于SpringBoot 在启动时,bean扫描失败,从而导致加载失败。 可以从如下几个方面排查: 检查问题类上是否标注了SpringBoot可以自动扫描的注解,比如缺失了@Service、@Component、@Mapper等,如果是这个原因,直接添加上响应的注解就可

    2023年04月24日
    浏览(35)
  • Error creating bean with name ‘esUtils‘ defined in file

     报错异常:  背景: esUtils在common服务中、启动media服务时候、报这个异常、后排查esUtils在启动时候发生异常引起的、在相关bean中加入try{}catch{}即可解决问题

    2024年02月11日
    浏览(49)
  • Spring中@Component和@Bean的区别

    1.用途不同         @Component多用于 标识一个普通的类 ,而@Bean多用于 配置类 里面去 声明和配置Bean对象 。 2.使用方式不同         @Component是 类级别 的注解,Spring可以 扫描到配置此注解的这些类并把它们注入到SpringIOC容器 中,@Bean是修饰在方法上的,表示此 方法返

    2024年02月16日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包