拦截器没有反应

拦截器没有反应

# 具体遇到的问题
最开始我自己写了拦截器,但没有任何作用。后来在使用了老师的原版文件之后,拦截器也没有任何反应。启动服务器之后直接就可以使用delete接口,不用登录。

由于没有报错信息,直接猜测错误应该会比较困难,想问问老师有可能是什么问题
# 报错信息的截图
http://img1.sycdn.imooc.com//climg/5fe1caeb090ad78616240932.jpg

# 相关课程内容截图

# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

1
package com.imooc.mall.config;<br><br>import com.imooc.mall.filter.AdminFilter;<br>import org.springframework.boot.web.servlet.FilterRegistrationBean;<br>import org.springframework.context.annotation.Bean;<br>import org.springframework.context.annotation.Configuration;<br><br>/**<br> * 描述:     Admin过滤器的配置<br> */<br>@Configuration<br>public class AdminFilterConfig {<br><br>    @Bean<br>    public AdminFilter adminFilter() {<br>        return new AdminFilter();<br>    }<br><br>    @Bean(name = "adminFilterConf")<br>    public FilterRegistrationBean adminFilterConfig() {<br>        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();<br>        filterRegistrationBean.setFilter(adminFilter());<br>        filterRegistrationBean.addUrlPatterns("/admin/category/*");<br>        filterRegistrationBean.addUrlPatterns("/admin/product/*");<br>        filterRegistrationBean.addUrlPatterns("/admin/order/*");<br>        filterRegistrationBean.setName("adminFilterConf");<br>        return filterRegistrationBean;<br>    }<br>}<br>
1
package com.imooc.mall.filter;<br><br>import com.imooc.mall.common.ApiRestResponse;<br>import com.imooc.mall.common.Constant;<br>import com.imooc.mall.exception.ImoocMallExceptionEnum;<br>import com.imooc.mall.model.pojo.Category;<br>import com.imooc.mall.model.pojo.User;<br>import com.imooc.mall.service.UserService;<br>import java.io.IOException;<br>import java.io.PrintWriter;<br>import javax.servlet.Filter;<br>import javax.servlet.FilterChain;<br>import javax.servlet.FilterConfig;<br>import javax.servlet.ServletException;<br>import javax.servlet.ServletRequest;<br>import javax.servlet.ServletResponse;<br>import javax.servlet.http.HttpServletRequest;<br>import javax.servlet.http.HttpServletResponse;<br>import javax.servlet.http.HttpServletResponseWrapper;<br>import javax.servlet.http.HttpSession;<br>import org.springframework.beans.BeanUtils;<br>import org.springframework.beans.factory.annotation.Autowired;<br><br>/**<br> * 描述:     管理员校验过滤器<br> */<br>public class AdminFilter implements Filter {<br><br>    @Autowired<br>    UserService userService;<br><br>    @Override<br>    public void init(FilterConfig filterConfig) throws ServletException {<br><br>    }<br><br>    @Override<br>    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,<br>            FilterChain filterChain) throws IOException, ServletException {<br>        HttpServletRequest request = (HttpServletRequest) servletRequest;<br>        HttpSession session = request.getSession();<br>        User currentUser = (User) session.getAttribute(Constant.IMOOC_MALL_USER);<br>        if (currentUser == null) {<br>            PrintWriter out = new HttpServletResponseWrapper(<br>                    (HttpServletResponse) servletResponse).getWriter();<br>            out.write("{\n"<br>                    + "    \"status\": 10007,\n"<br>                    + "    \"msg\": \"NEED_LOGIN\",\n"<br>                    + "    \"data\": null\n"<br>                    + "}");<br>            out.flush();<br>            out.close();<br>            return;<br>        }<br>        //校验是否是管理员<br>        boolean adminRole = userService.checkAdminRole(currentUser);<br>        if (adminRole) {<br>            filterChain.doFilter(servletRequest, servletResponse);<br>        } else {<br>            PrintWriter out = new HttpServletResponseWrapper(<br>                    (HttpServletResponse) servletResponse).getWriter();<br>            out.write("{\n"<br>                    + "    \"status\": 10009,\n"<br>                    + "    \"msg\": \"NEED_ADMIN\",\n"<br>                    + "    \"data\": null\n"<br>                    + "}");<br>            out.flush();<br>            out.close();<br>        }<br>    }<br><br>    @Override<br>    public void destroy() {<br><br>    }<br>}<br>
1
package com.imooc.mall.controller;<br><br>import com.imooc.mall.common.ApiRestResponse;<br>import com.imooc.mall.common.Constant;<br>import com.imooc.mall.exception.ImoocMallExceptionEnum;<br>import com.imooc.mall.model.pojo.Category;<br>import com.imooc.mall.model.pojo.User;<br>import com.imooc.mall.model.request.AddCategoryReq;<br>import com.imooc.mall.model.request.UpdateCategoryReq;<br>import com.imooc.mall.service.CategoryService;<br>import com.imooc.mall.service.UserService;<br>import io.swagger.annotations.Api;<br>import io.swagger.annotations.ApiOperation;<br>import org.springframework.beans.BeanUtils;<br>import org.springframework.beans.factory.annotation.Autowired;<br>import org.springframework.stereotype.Controller;<br>import org.springframework.web.bind.annotation.PostMapping;<br>import org.springframework.web.bind.annotation.RequestBody;<br>import org.springframework.web.bind.annotation.ResponseBody;<br><br>import javax.servlet.http.HttpSession;<br>import javax.validation.Valid;<br><br>@Controller<br>public class CategoryController {<br>    @Autowired<br>    UserService userService;<br>    @Autowired<br>    CategoryService categoryService;<br><br>    @ApiOperation("后台添加商品分类")<br>    @PostMapping("admin/category/add")<br>    @ResponseBody<br>    public ApiRestResponse addCategory(HttpSession session, @Valid @RequestBody AddCategoryReq addCategoryReq) {<br>        if (addCategoryReq.getName() == null) {<br>            return ApiRestResponse.error(ImoocMallExceptionEnum.NAME_NOTNULL);<br>        }<br>        User currentUser = (User) session.getAttribute(Constant.IMOOC_MALL_USER);<br>        if (currentUser == null) {<br>            return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_LOGIN);<br>        }<br>        boolean adminRole = userService.checkAdminRole(currentUser);<br>        if (adminRole) {<br>            categoryService.add(addCategoryReq);<br>            return ApiRestResponse.success();<br>        }else{<br>            return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_ADMIN);<br>        }<br>    }<br><br>    @PostMapping("admin/category/update")<br>    @ResponseBody<br>    public ApiRestResponse updateCategory(@Valid @RequestBody UpdateCategoryReq updateCategoryReq, HttpSession session) {<br>        User currentUser = (User) session.getAttribute(Constant.IMOOC_MALL_USER);<br>        if (currentUser == null) {<br>            return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_LOGIN);<br>        }<br>        boolean adminRole = userService.checkAdminRole(currentUser);<br>        if (adminRole) {<br>            Category category = new Category();<br>            BeanUtils.copyProperties(updateCategoryReq, category);<br>            categoryService.update(category);<br>            return ApiRestResponse.success();<br>        }else{<br>            return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_ADMIN);<br>        }<br>    }<br><br>    @ApiOperation("后台删除目录")<br>    @PostMapping("admin/category/delete")<br>    @ResponseBody<br>    public ApiRestResponse deleteCategory(){<br>        return  null;<br>    }<br>}<br>


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,测试同学的代码,执行delete()方法时,会被拦截,提示需要登录。如果同学添加和修改方法执行时会被拦截,说明拦截器没有问题。这里建议同学编译一下,重启再试试,如:

http://img1.sycdn.imooc.com//climg/5fe2a51e09db4df803900154.jpg

如果同学打了断点,需要使用debug执行,同学是否使用的debug执行?

另外问一下同学执行delete()方法时,是否已经使用了管理员账号登录,如果使用管理员账号登录,将不会被拦截,而是继续执行相应的方法。

祝学习愉快~


好帮手慕阿满 2020-12-22 19:17:07

同学你好,问一下同学添加和修改时,不登录可以执行对应的add()和update()方法吗?

建议同学在AdminFilter 类中打上断点,查看是否执行过滤器,如果执行过滤器,查看获取当前登录对象是否为null。

祝学习愉快~

  • 提问者 慕仰7036876 #1

    有作用是因为add方法写了校验代码,在拦截器中打了断点,但感觉拦截器跟没写一样不知道为什么没有作用。

    2020-12-22 20:10:43
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码