拦截器没有反应
# 具体遇到的问题
最开始我自己写了拦截器,但没有任何作用。后来在使用了老师的原版文件之后,拦截器也没有任何反应。启动服务器之后直接就可以使用delete接口,不用登录。
由于没有报错信息,直接猜测错误应该会比较困难,想问问老师有可能是什么问题
# 报错信息的截图
# 相关课程内容截图
# 尝试过的解决思路和结果
# 粘贴全部相关代码,切记添加代码注释(请勿截图)
1package
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>
1package
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>
1package
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>
40
收起
正在回答
2回答
同学你好,测试同学的代码,执行delete()方法时,会被拦截,提示需要登录。如果同学添加和修改方法执行时会被拦截,说明拦截器没有问题。这里建议同学编译一下,重启再试试,如:
如果同学打了断点,需要使用debug执行,同学是否使用的debug执行?
另外问一下同学执行delete()方法时,是否已经使用了管理员账号登录,如果使用管理员账号登录,将不会被拦截,而是继续执行相应的方法。
祝学习愉快~
java工程师2020版
- 参与学习 人
- 提交作业 9404 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧