[转载]Struts2拦截器 实现未登录拦截和权限控制
2014-07-04 10:32
615 查看
原文地址:Struts2拦截器 实现未登录拦截和权限控制作者:郑君华
最近在研究struts,把以前做项目时候用拦截器实现的一些功能回想起来跟大家分享一下:
先创建一个拦截器,实现MethodFilterInterceptor这个抽象类,可以进行方法的限制和包含过滤。
该拦截器实现未登录不能进行访问的功能,可以扩展成对权限进行控制。
package com.struts2.interceptor;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsStatics;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
public class LoginInterceptor extends MethodFilterInterceptor {
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
ActionContext context = invocation.getInvocationContext();
//通过ActionContext来获取httpRequest
HttpServletRequest request = (HttpServletRequest)context.get(StrutsStatics.HTTP_REQUEST);
//也可以通过ServletActionContext来获取httpRequest
//HttpServletRequest request = ServletActionContext.getRequest();
//取得根目录的绝对路径
String currentURL = request.getRequestURI();
//截取到访问的相对路径,可以通过这个和权限表比较来进行相应的权限控制
String targetURL = currentURL.substring(currentURL.indexOf("/", 1), currentURL.length());
System.out.println(currentURL+".............."+targetURL);
//通过ActionContext获取session的信息,以Map形式返回
Map session = context.getSession();
//获取容器里面的username值,如果存在说明该用户已经登录,让他执行操作,如果未登录让他进行登录
String username = (String)session.get("username");
if(username!=null){
invocation.invoke();
}
context.put("nologin", "对不起,你没有登录,不能进行该操作");
return "login";
}
}
然后将这个拦截器配置的struts.xml里面:
<!-- 配置拦截器 -->
<package name="my-default" extends="struts-default">
<interceptors>
<!-- 配置未登录进行操作的拦截器 -->
<interceptor name="loginInterceptor" class="com.struts2.interceptor.LoginInterceptor">
<param name="param">测试参数</param>
</interceptor>
<!-- 重新封装一个默认的拦截器栈 -->
<interceptor-stack name="myDefaultStack">
<interceptor-ref name="loginInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<!-- 为这个包设置默认的拦截器栈 -->
<default-interceptor-ref name="myDefaultStack" />
<!-- 设置全局的返回值 -->
<global-results>
<result name="login">/login.jsp</result>
</global-results>
</package>
最近在研究struts,把以前做项目时候用拦截器实现的一些功能回想起来跟大家分享一下:
先创建一个拦截器,实现MethodFilterInterceptor这个抽象类,可以进行方法的限制和包含过滤。
该拦截器实现未登录不能进行访问的功能,可以扩展成对权限进行控制。
package com.struts2.interceptor;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsStatics;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
public class LoginInterceptor extends MethodFilterInterceptor {
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
ActionContext context = invocation.getInvocationContext();
//通过ActionContext来获取httpRequest
HttpServletRequest request = (HttpServletRequest)context.get(StrutsStatics.HTTP_REQUEST);
//也可以通过ServletActionContext来获取httpRequest
//HttpServletRequest request = ServletActionContext.getRequest();
//取得根目录的绝对路径
String currentURL = request.getRequestURI();
//截取到访问的相对路径,可以通过这个和权限表比较来进行相应的权限控制
String targetURL = currentURL.substring(currentURL.indexOf("/", 1), currentURL.length());
System.out.println(currentURL+".............."+targetURL);
//通过ActionContext获取session的信息,以Map形式返回
Map session = context.getSession();
//获取容器里面的username值,如果存在说明该用户已经登录,让他执行操作,如果未登录让他进行登录
String username = (String)session.get("username");
if(username!=null){
invocation.invoke();
}
context.put("nologin", "对不起,你没有登录,不能进行该操作");
return "login";
}
}
然后将这个拦截器配置的struts.xml里面:
<!-- 配置拦截器 -->
<package name="my-default" extends="struts-default">
<interceptors>
<!-- 配置未登录进行操作的拦截器 -->
<interceptor name="loginInterceptor" class="com.struts2.interceptor.LoginInterceptor">
<param name="param">测试参数</param>
</interceptor>
<!-- 重新封装一个默认的拦截器栈 -->
<interceptor-stack name="myDefaultStack">
<interceptor-ref name="loginInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<!-- 为这个包设置默认的拦截器栈 -->
<default-interceptor-ref name="myDefaultStack" />
<!-- 设置全局的返回值 -->
<global-results>
<result name="login">/login.jsp</result>
</global-results>
</package>
相关文章推荐
- Struts2拦截器 实现未登录拦截和权限控制
- Struts2拦截器 实现未登录拦截和权限控制
- Struts2拦截器实现登录权限控制(十二)
- 在struts2中使用拦截器(Interceptor)控制登录和权限
- Struts2拦截器实现细颗粒权限控制
- 使用Struts2的拦截器实现权限控制
- 在struts2中使用拦截器(Interceptor)控制登录和权限
- struts2拦截器实现权限控制
- Struts2 用拦截器实现最基本的登录权限认证。
- struts2通过拦截器,实现权限控制功能
- Struts 拦截器权限控制【通过拦截器实现登录后跳转到登录前页面】
- struts2中使用拦截器(Interceptor)控制登录和权限
- 基于struts2拦截器的权限控制系统1——后台方法的拦截
- struts2 拦截器控制用户登录权限
- Struts2实现登录权限访问控制
- Struts 拦截器权限控制【通过拦截器实现登录后跳转到登录前页面】
- 在struts2中使用拦截器(Interceptor)控制登录和权限
- struts2拦截器实现登录控制
- 在struts2中使用拦截器(Interceptor)控制登录和权限
- struts2 使用注解、反射、拦截器实现基于方法的权限控制