栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用拦截器来验证用户访问权限

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用拦截器来验证用户访问权限

Struts Session只是

Map<String,Object>
底层的包装
HttpSession

虽然实现SessionAware接口是在Action中获取它的正确方法,但是如果要从Interceptor中获取它,则需要执行以下操作:

要获取Struts 会话图

@Overridepublic String intercept(ActionInvocation ai) throws Exception {    final ActionContext context = ai.getInvocationContext();    // Struts Session    Map<String, Object> session = context.getSession();

要获得真正的 HttpSession对象

@Overridepublic String intercept(ActionInvocation ai) throws Exception {    final ActionContext context = ai.getInvocationContext();    HttpServletRequest request = (HttpServletRequest)context.get(StrutsStatics.HTTP_REQUEST);    // Http Session    HttpSession session = request.getSession();

就是说,您没有在动作中获得会话(也没有其他任何参数,对象等)的原因是,您陷入一个常见错误: 仅应用一个 (您的) 拦截器, 而不是
应用整个拦截器堆栈 (其中应包含您的):

您可以在每个动作中定义两次:

<action name="login" >    <interceptor-ref name="defaultStack" /> <!-- this is missing -->    <interceptor-ref name="containskeyinterceptor" />

或者更好的是,在自定义堆栈中定义一次,并始终使用堆栈:

<interceptors>    <interceptor-stack name="yourStack"> <interceptor-ref name="defaultStack"/>       <interceptor-ref name="containskeyinterceptor"/>    </interceptor-stack></interceptors><action name="login" >    <interceptor-ref name="yourStack" />

并最终使用default-interceptor-ref定义它,以避免为该程序包的每个操作配置编写它:

<default-interceptor-ref name="yourStack"/><action name="login" >


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/496368.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号