关于shiro,springMVC整合后一个诡异的问题(疑似BUG)

我是付刚 2016-04-07 10:22:39
加精
问题描述,本人搭建了个springMVC整合shiro的框架,现在出现了一个诡异的问题,希望各位高手遇到的能指教下;
我使用了Controller基类,其他controller都继承该controller,这样在子Controller里便可以直接使用父类中初始化后的成员变量,以下是BaseController的部分代码。
	
protected HttpServletRequest request;
/**
* @todo 公共的设置参数方法
* @author fg
* @date 2016年1月27日
*/
@ModelAttribute
void initParam(HttpServletRequest request,HttpServletResponse response)
{

this.request = request;

}

然后在子类中使用父类成员变量时,出现了问题。
情况1:不使用@RequiresRoles("SuperAdmin"),正常
@Scope("prototype")
@Controller
@RequestMapping(value="/article")
public class ArticleController extends BaseController
{
@RequestMapping("queryAllArticle")
public ModelAndView queryarticleByOption()
{
System.out.println(request);//不为空
return null;
}

}

情况2:@RequiresRoles("SuperAdmin")在类上 ,正常
@RequiresRoles("SuperAdmin")
@Scope("prototype")
@Controller
@RequestMapping(value="/article")
public class ArticleController extends BaseController
{
@RequestMapping("queryAllArticle")
public ModelAndView queryarticleByOption()
{
System.out.println(request);//不为空
return null;
}

}

情况3:@RequiresRoles("SuperAdmin")在方法上 ,异常
@Scope("prototype")
@Controller
@RequestMapping(value="/article")
public class ArticleController extends BaseController
{
@RequiresRoles("SuperAdmin")
@RequestMapping("queryAllArticle")
public ModelAndView queryarticleByOption()
{
System.out.println(request);//null
return null;
}

}

问题不知出在了哪里
于是,我又做了以下的测试
情况4:异常
@Scope("prototype")
@Controller
@RequestMapping(value="/article")
public class ArticleController extends BaseController
{

@RequestMapping("queryAllArticle")
public ModelAndView queryarticleByOption()
{
System.out.println(request);//null
return null;
}

@RequiresRoles("SuperAdmin")
@RequestMapping("test")
public ModelAndView test()
{
System.out.println(request);//null
return null;
}
}


综上测试:当@RequiresRoles出现在Controller的方法上时,会使拿到的父类成员变量变为空

请各位看下是什么问题,深表感激!
ps:
1,springMVC 版本 4.0.2,shiro版本 1.2.4
2,基类中this.request = request;是执行的
3,Controller是prototype的

...全文
1950 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵伟大魔王 2017-09-14
  • 打赏
  • 举报
回复
shiro跟mvc都没关系 整合 正常 看不懂 mvc 继承 base 控制层
lionkang 2016-08-09
  • 打赏
  • 举报
回复
学习学习。。。
我是付刚 2016-04-11
  • 打赏
  • 举报
回复
问题没有解决。 只怪自己深度不够啊。 暂时摒弃了这种写法。 看下后来人有何见解
我是付刚 2016-04-08
  • 打赏
  • 举报
回复
问题进一步定位了。 @RequiresRoles只能加在方法上才能生效。 当baseController设置过成员变量之后,又被初始化了。 因此问题就指向了“使用shiro后”Controller又被重新创建了一次
ZuoGeshdJingShen 2016-04-08
  • 打赏
  • 举报
回复
进来学习。。。
我是付刚 2016-04-07
  • 打赏
  • 举报
回复
没有人么 -.-
cattpon 2016-04-07
  • 打赏
  • 举报
回复
初始的模型很不错~
我是付刚 2016-04-07
  • 打赏
  • 举报
回复

这里莫名其妙的使用了AspectJAwareAdvisorAutoProxyCreator
cattpon 2016-04-07
  • 打赏
  • 举报
回复
learning~
我是付刚 2016-04-07
  • 打赏
  • 举报
回复
引用 3 楼 shijing266 的回复:
现在忙,晚上再来细看
非常感谢!
  • 打赏
  • 举报
回复
现在忙,晚上再来细看
我是付刚 2016-04-07
  • 打赏
  • 举报
回复
问题进一步确认,当存在 @RequiresRoles("SuperAdmin")时 会日志会出现 DEBUG [org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator] - Creating implicit proxy for bean 'articleController' with 0 common interceptors and 1 specific interceptors 求救!

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧