您的位置:首页 > 编程语言 > Java开发

struts2 使用拦截器 实现用户权限的验证

2010-04-11 11:44 615 查看
1、编写实现拦截验证的类



package iterceptor;

import java.util.Map;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class AuthorityInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;

// 拦截Action处理的拦截方法
public String intercept(ActionInvocation invocation) throws Exception {
// 取得请求相关的ActionContext实例
ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
// 取出名为user的Session属性
String user = (String) session.get("username");

// try{
// System.out.println("得到的用户名是: "+user);
// }catch(Exception ex){
// System.out.println("异常: "+ex.toString());
// }

// 如果没有登陆,或者登陆所用的用户名不是scott,都返回重新登陆
if (user != null && user.equals("weiqingli")) {
return invocation.invoke();
}
// 没有登陆,将服务器提示设置成一个HttpServletRequest属性
ctx.put("tip", "您还没有登陆,请输入scott,tiger登陆系统");
// 直接返回login的逻辑视图
return Action.LOGIN;
}
}



2、在struts.xm 配置

<!-- 用户拦截器定义在该元素下 -->
<interceptors>
<!-- 定义了一个名为checkUserLogin的拦截器 -->
<interceptor name="checkUserLogin" class="iterceptor.AuthorityInterceptor"/>


<!--为了在action里面的方便引用,做成拦截器堆栈 -->
<interceptor-stack name="checkUserLogin_stack">
<!-- 应用默认拦截器堆栈 一定要有 -->
<interceptor-ref name="defaultStack" />
<!-- 应用自定义拦截器 -->
<interceptor-ref name="checkUserLogin" />
</interceptor-stack>
</interceptors>





3、在需要验证身份的action里,使用拦截器



<!-- 需要登录权限的页面 -->
<action name="main" class="com.qili.Main" method="main">

<!-- 使用自定义拦截器 -->
<interceptor-ref name="checkUserLogin_stack"></interceptor-ref>
<result name="success" type="freemarker">/ftl/main.html</result>
</action>



4、配全局结果,结果为 login的转正,都指向登录页



<global-results>
<result name="login" type="redirect">login.jsp</result>
</global-results>





5、实现下载

下载 http://download.csdn.net/source/2227130
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: