0
点赞
收藏
分享

微信扫一扫

过滤器_登录权限的判断



登陆权限判断


登陆, 提交到登陆Servlet处理其业务!


登陆成功, 跳转到首页,显示欢迎信息 + 列表信息


登陆失败,跳转到登陆!



要求:


只有登陆后,才可以访问首页, 显示列表


如果没有登陆,直接访问首页列表,要跳转到登陆!



实现思路:


1.Login.jsp   登陆页面


2.List.jsp     列表显示


3.LoginServlet.java   登陆处理servlet


4.ListServlet.java   首页列表查询Servlet


5.LoginFilter.java     登陆验证过滤器



能直接访问的链接有:



​​      http://localhost:8080/contactSystem/login.jsp ​​



​​      http://localhost:8080/contactSystem/LoginServlet ​​



 不能直接访问的链接有:



​​      http://localhost:8080/contactSystem/ListServlet ​​

     

​​http://localhost:8080/contactSystem/list.jsp​



核心过滤器代码:


但是此过滤器有问题:


①页面用了js和css,也会被拦截,所以通过截取uri来判断这样不妥。


②但登录成功后再直接访问list.jsp,能进入,而且是空数据。


所以此代码仅供过滤器写法作参考。


package com.cn.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* 登录验证过滤器
* @author liuzhiyong

能直接访问的链接有:
http://localhost:8080/contactSystem/login.jsp
http://localhost:8080/contactSystem/LoginServlet
不能直接访问的链接有:
http://localhost:8080/contactSystem/ListServlet
http://localhost:8080/contactSystem/list.jsp
*/
public class LoginFilter implements Filter{
/**
* 拦截业务逻辑:
* 1.先指定放行的资源,哪些资源不需要拦截:
* login.jsp + /LoginServlet (request对象可以获取)
* 2.获取session,从session中获取用户信息userInfo
* 3.再判断用户信息是否为空
* 为空,说明没有登录,跳转到登录
* 不为空,已经登录,放行
*/
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {

//转型
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)res;

//获取到请求的uri
String uri = request.getRequestURI();
System.out.println("=======拦截的uri=========="+uri);
//先判断指定放行的资源,给予放行:
if(uri.equals(request.getContextPath()+"/LoginServlet") || uri.equals(request.getContextPath()+"/login.jsp")
|| uri.equals(request.getContextPath()+"/css/login.css") || uri.equals(request.getContextPath()+"/js/login.js")
|| uri.equals(request.getContextPath()+"/js/jquery-1.8.2.js")){
//放行
chain.doFilter(request, response);
}else{//拦截其它资源
//获取session,从session中获取用户信息userInfo
HttpSession session = request.getSession(false);//注意这里填上参数false,以免自己创建
if(session != null){
//从session中获取用户信息userInfo
Object userInfo = session.getAttribute("userInfo");
//判断用户信息是否为空
if(userInfo == null){//没有登录,跳转到登录
request.getRequestDispatcher("/login.jsp").forward(request, response);
}else{//已经登录,放行
chain.doFilter(request, response);
}
}else{//session为空,说明也没有登录,跳到登录
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub

}

@Override
public void destroy() {
// TODO Auto-generated method stub

}
}

举报

相关推荐

0 条评论