• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

spring aop 拦截业务方法,实现权限控制示例

java 搞代码 4年前 (2022-01-05) 69次浏览 已收录 0个评论

这篇文章主要介绍了spring aop 拦截业务方法,实现权限控制示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

难点:aop类是普通的java类,session是无法注入的,那么在有状态的系统中如何获取用户相关信息呢,session是必经之路啊,获取session就变的很重要。思索很久没有办法,后来在网上看到了解决办法。

思路是:

i. SysContext  成员变量 request,session,response 

ii. Filter 目的是给 SysContext 中的成员赋值 

iii.然后在AOP中使用这个SysContext的值

要用好,需要理解  ThreadLocal和  和Filter 执行顺序

1.aop获取request,response,session等

 public class SysContext { private static ThreadLocal requestLocal=new ThreadLocal(); private static ThreadLocal responseLocal=new ThreadLocal(); public static HttpServletRequest getRequest(){ return requestLocalget(); } public static void setRequest(HttpServletRequest request){ requestLocalset(request); } public static HttpServletResponse getResponse(){ return responseLocalget(); } public static void setResponse(HttpServletResponse response){ responseLocalset(response); } public static HttpSession getSession(){ return (HttpSession)(getRequest())getSession(); } } 

2.添加过滤器

 public class GetContextFilter implements Filter{ @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { SysContextsetRequest((HttpServletRequest)request); SysContextsetResponse((HttpServletResponse)response); chaindoFilter(request, response); } @Override public void init(FilterConfig config) throws ServletException { } } 

3.配置web.xml 

将这部分放置在最前面,这样可以过滤到所有的请求

  sessionFiltercomuneifilterGetContextFilter sessionFilter*

4.spring aop before

从session中取出用户名,如果不存在,抛出异常跳转,将错误信息放到request中

 @Aspect public class AdminAspect { ActionContext context = ActionContextgetContext(); HttpServletRequest request; HttpServletResponse response; @Before("execution(* comuneiActionAdminActiongetPrivileges())") public void adminPrivilegeCheck() throws Throwable { HttpSession session = SysContextgetSession(); request = SysContextgetRequest(); response = SysContextgetResponse(); String userName = ""; try { userName = sessiongetAttribute("userName")toString(); if(userName==null||userNameeq<p style="color:transparent">来源gao!daima.com搞$代!码网</p>uals("")) throw new Exception("no privilege"); } catch (Exception ex) { requestsetAttribute("msg", "{\"res\":\"" + "无权限" + "\"}"); try { requestgetRequestDispatcher("/jsp/jsonjsp")forward( request, response); } catch (ServletException e) { eprintStackTrace(); } catch (IOException e) { eprintStackTrace(); } } } } 

5.applicationContext.xml

 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持gaodaima搞代码网

以上就是spring aop 拦截业务方法,实现权限控制示例的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:spring aop 拦截业务方法,实现权限控制示例

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址