求助,spring mvc拦截器如何获取 Controller返回的json数据

求助,spring mvc拦截器如何获取 Controller返回的json数据,第1张

也许可以这样,你需要返回一个json,这个json由一个对象呗@ResponseBody自动序列生成,然后,你试着将这个对象保存进model里面,mv.setObject("xx",xx)然后在拦截器中拦截未返回的的那个方法中model里面的对象做处理,对象是引用,这里改了

不是呀

这两个原理都不一样

springsecurity

的实现原理:

核心

:登陆验证拦截器AuthenticationProcessingFilter

资源管理拦截器AbstractSecurityInterceptor以及AuthenticationManager、accessDecisionManager等组件来支撑。

流程:用户登陆,会被AuthenticationProcessingFilter拦截,调用AuthenticationManager的实现,而且AuthenticationManager会调用ProviderManager来获取用户验证信息(不同的Provider调用的服务不同,因为这些信息可以是在数据库上,可以是在LDAP服务器上,可以是xml配置文件上等),如果验证通过后会将用户的权限信息封装一个User放到spring的全局缓存SecurityContextHolder中,以备后面访问资源时使用。

访问资源(即授权管理),访问url时,会通过AbstractSecurityInterceptor拦截器拦截,其中会调用FilterInvocationSecurityMetadataSource的方法来获取被拦截url所需的全部权限,在调用授权管理器AccessDecisionManager,这个授权管理器会通过spring的全局缓存SecurityContextHolder获取用户的权限信息,还会获取被拦截的url和被拦截url所需的全部权限,然后根据所配的策略(有:一票决定,一票否定,少数服从多数等),如果权限足够,则返回,权限不够则报错并调用权限不足页面

shiro的实现原理:

Shiro的三个核心组件:Subject,

SecurityManager

Realms.

Subject:即“当前 *** 作用户”。但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon

Account)或其他类似事物。它仅仅意味着“当前跟软件交互的东西”。但考虑到大多数目的和用途,你可以把它认为是Shiro的“用户”概念。

Subject代表了当前用户的安全 *** 作,SecurityManager则管理所有用户的安全 *** 作。

SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。

Realm:

Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。

从这个意义上讲,Realm实质上是一个安全相关的DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给Shiro。当配置Shiro时,你必须至少指定一个Realm,用于认证和(或)授权。配置多个Realm是可以的,但是至少需要一个。

Shiro内置了可以连接大量安全数据源(又名目录)的Realm,如LDAP、关系数据库(JDBC)、类似INI的文本配置资源以及属性文件等。如果缺省的Realm不能满足需求,你还可以插入代表自定义数据源的自己的Realm实现。

第一,你是讲userId存放在那个位置

@Override

public boolean preHandle(HttpServletRequest req, HttpServletResponse res,

Object arg2) throws Exception {

System.out.println("SessionInterceptor的preHandle方法")

HttpSession session=req.getSession()

Object obj=session.getAttribute("admin")

if(obj==null){

//没有登录,跳转到登录页面

res.sendRedirect("toLogin.do")

//中断处理流程

return false

}

return true

}

}

第二: 你引入的借口是否正确

implements HandlerInterceptor

第三: 你应该在登录界面进行排除验证,不是所有都使用拦截器

具体就是使用exclude这个属性,进行登录页面加载排除


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/sjk/6775705.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存