关于java过滤器的一个问题(过滤器同时也过滤登录页面?)

Atest001 2011-03-03 09:26:49
我做了一个过滤器(结合struts和hibernate),我的意图是:如果用户直接访问需要登录才能访问到的管理页面,则先跳转到提示页面之后五秒自动跳转到登录页面。可是结果因为把整个web应用都过滤了,所以当请求跳转到登录页面时又因为没有登录而又跳转到提示页面,之后一直循环。
我开始本想把登录页面另建立在一个目录下,之后在配置文件中设置过滤其他文件,而登录页面所在的目录资源不予以过滤,这样一来,还要重新去配置怎么过滤action。而且我也不知道怎么去过滤action。比如说com.zhang.action包下有actioncollected类delete方法,对应的action是delete,怎么在过滤器中配置?
附带web.xml部分代码:

<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.zhang.util.FilterAll</filter-class>
<init-param>
<param-name>loginPage</param-name>
<param-value>/Login.jsp</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

有没有更好的办法 ?
...全文
518 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Atest001 2011-03-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xiaoye2892 的回复:]
在过滤器中处理 判断
比如判断请求的url的后缀名包括主页就不过滤
[/Quote]
按照你的想法做好了 多谢!
niu_hao 2011-03-03
  • 打赏
  • 举报
回复
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.zhang.util.FilterAll</filter-class>
<init-param>
<param-name>loginPage</param-name>
<param-value>/Login.jsp</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>


jeky_zhang2013 2011-03-03
  • 打赏
  • 举报
回复
这个要做起来,还是得用权限管理,看看spring的权限框架acegi,按你说的做,越做越复杂,思路没理顺
Atest001 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xiaoye2892 的回复:]
在过滤器中处理 判断
比如判断请求的url的后缀名包括主页就不过滤
[/Quote]
能不能详细点?没看懂。过滤器类贴上,烦劳修改下。

public class FilterAll implements javax.servlet.Filter {

private FilterConfig filterConfig;
private String loginPage = "Login.jsp";

public void destroy() {
filterConfig = null;
System.gc();
}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
HttpSession session = req.getSession(true);
if(session.getAttribute("user") != null ){
chain.doFilter(request, response);
return;
}
else{
ServletContext ctx = filterConfig.getServletContext();
setForwordURI(req);
ctx.getRequestDispatcher(loginPage).forward(req, res);

}
}

public void init(FilterConfig config) throws ServletException {
filterConfig = config;
if(filterConfig.getInitParameter("loginPage") != null)
loginPage = filterConfig.getInitParameter("loginPage");
}


private void setForwordURI(HttpServletRequest request){
StringBuffer requestURI = new StringBuffer(request.getRequestURI());
String queryString = request.getQueryString();
if(queryString != null){
requestURI.append("?").append(queryString);
}
request.setAttribute("orignURL", requestURI.toString());
}

}
happyfmy 2011-03-03
  • 打赏
  • 举报
回复
在过滤器中处理 判断
比如判断请求的url的后缀名包括主页就不过滤
Atest001 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wanghantong 的回复:]
1.你本身的思路就有问题
你用过滤器拦截,是因为session中没有USER,你跳转以后还是没有USER,然后不就死循环了吗那是必然的啊
你可以用权限,但是似乎更麻烦,
为什么你要等5秒后去登录呢??如果我是用户等5秒在那响应,我就会关掉你的网站
[/Quote]

。。。。
我还是提供了一个按钮让用户跳转到登陆页面的
桐桐-Dragon 2011-03-03
  • 打赏
  • 举报
回复
1.你本身的思路就有问题
你用过滤器拦截,是因为session中没有USER,你跳转以后还是没有USER,然后不就死循环了吗那是必然的啊
你可以用权限,但是似乎更麻烦,
为什么你要等5秒后去登录呢??如果我是用户等5秒在那响应,我就会关掉你的网站

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧