java 过滤器权限控制_过滤器和拦截器的比较及未登录用户权限限制的实现(ZHUAN)...

本文介绍了如何使用Java过滤器和拦截器实现用户权限控制。当用户未登录时,禁止访问所有页面并自动重定向到登录页面。通过过滤器配置,例如在web.xml中设置filter-mapping,拦截所有.jsp和.action请求。同时,展示了拦截器在Struts2中的配置和实现,用于验证session中的用户信息,如果未登录且访问的不是登录action,则重定向到登录页面。
摘要由CSDN通过智能技术生成

需要实现的功能:判断用户是否已登录,未登录用户禁止访问任何页面或action,自动跳转到登录页面。

过程:因为对过滤器和拦截器都不熟悉,开始两种方式都问题不断,后调试通过,贴在这里留作小结和备忘

过滤器filter实现

配置:web.xml

RightFilter

com.***.rights.RightFilter

RightFilter

*.jsp

RightFilter

*.action

代码:

mport java.io.IOException;

importjavax.servlet.Filter;

importjavax.servlet.FilterChain;

importjavax.servlet.FilterConfig;

importjavax.servlet.ServletException;

importjavax.servlet.ServletRequest;

importjavax.servlet.ServletResponse;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importjavax.servlet.http.HttpSession;

publicclassRightFilterextendsHttpServletimplementsFilter {

publicvoiddoFilter(ServletRequest arg0, ServletResponse arg1,

FilterChain arg2) throwsIOException, ServletException {

HttpServletResponse response = (HttpServletResponse) arg1;

HttpServletRequest request=(HttpServletRequest)arg0;

HttpSession session = request.getSession(true);

String usercode = (String) session.getAttribute("usercode");//

String url=request.getRequestURI();

if(usercode==null|| usercode.equals(""))

{

//判断获取的路径不为空且不是访问登录页面或执行登录操作时跳转

if(url!=null&& !url.equals("") && ( url.indexOf("Login")<0&& url.indexOf("login")<0))

{

response.sendRedirect("登录路径");

return;

}

}

//已通过验证,用户访问继续

arg2.doFilter(arg0, arg1);

return;

}

publicvoidinit(FilterConfig arg0)throwsServletException {

// TODO Auto-generated method stub

}

配置中的filter-mapping,定义的是需过滤的请求类型,上面的配置即过滤所有对jsp页面和action的请求。过滤器的实现与struts2、spring框架无关,在用户请求被相应前执行,在过滤器中,可使用response.sendRedirect("")等方法

跳转到需要的链接,如登录页面、错误页面等,不需要跳转时,arg2.doFilter(arg0, arg1);即可继续执行用户的请求。注意使用filter时避免连续两次跳转,否则会报java.lang.IllegalStateException错误,具体配置方法网上有,除非必要,不建议使用/*(过滤所有访问)的配置方式,这样配置,图片、js文件、css文件等访问都会被过滤

拦截器interceptor实现:

配置:struts.xml

Login.jsp

/error.jsp

代码:

importjava.util.HashMap;

importjava.util.Map;

importcom.opensymphony.xwork2.Action;

importcom.opensymphony.xwork2.ActionInvocation;

importcom.opensymphony.xwork2.interceptor.AbstractInterceptor;

importcom.opensymphony.xwork2.ActionContext;

publicclassRightInterceptorextendsAbstractInterceptor {

@Override

publicString intercept(ActionInvocation invocation)throwsException {

//System.out.println("拦截器开始验证");

try

{

ActionContext actionContext = ActionContext.getContext();

Map session = actionContext.getSession();

String user=session.get("usercode").toString();

//当前用户session无效且访问的action不是登录action时,执行拦截,跳转

if((user==null|| user.equals("")) && !invocation.getAction().getClass().getName().equals("登录action"))

{

returnAction.LOGIN;

}

}

catch(Exception e)

{

e.printStackTrace();

returnAction.LOGIN;

}

//System.out.println("拦截器通过验证");

returninvocation.invoke();//执行访问的action

}

}

拦截器由spring管理,只对action起作用,不能拦截jsp页面、图片等其他资源。拦截器截获用户对action的访问,如需要跳转,只需如action一样返回一个result,spring根据result的配置执行跳转。如无需跳转,可调用invocation.invoke();方法来执行用户请求的action。拦截器在action之前开始,在action完成后结束(如被拦截,action根本不执行)

如不进行处理,过滤器和拦截器都会将正常的登录操作屏蔽,因此过滤器中需要判断用户访问的url是否为登录操作或登录页面,拦截器中需要判断用户访问的action是否登录action。(暂未考虑其他区分方法,留问。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值