由于本人实习中,时间仓促,先把代码抛上来了..
以下代码是罗伟学长所写,本人觉得很值得借鉴。
public class SecurityCheckFilter implements Filter {
private String failedForwardPage = "index.html";//出错转向主页面
private Vector<String> managerPages = new Vector<String>(); // 保存管理员的页面,使一般用户不能访问,这个地方有待改进.
/*
* (non-Javadoc)
*
* @see javax.servlet.Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/*
* (non-Javadoc)
*
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
* javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletRequest res = (HttpServletRequest) arg0;
HttpServletResponse resp = (HttpServletResponse) arg1;
String ip = res.getRemoteAddr(); // 获得访问机器的IP地址
System.out.println("获得访问机器的IP地址:request.getRemoteAddr()="+ip);
HttpSession session = res.getSession();
if (ip.equals("0:0:0:0:0:0:0:1")) { // 表示通过远程登陆访问页面
ip = InetAddress.getLocalHost().getHostAddress();
}
String requestPath = res.getServletPath();
String requestURI = res.getRequestURI(); // 防止在IE中的地址栏直接输入地址访问.
master.user.User user=(master.user.User)session.getAttribute("user");
System.out.println("getRemoteHost:"+ip+"getServletPath:"+requestPath+"requestURI:"+requestURI);
if (user!=null && "11".equals(user.getAuthority())) // 优先让管理员登陆
{// System.out.println("管理员登陆");
arg2.doFilter(arg0, arg1);
} else{//非管理员则进行过滤
if (!managerPages.contains(requestPath)
&& !requestURI.endsWith("/manageFrames2.htm")) {
arg2.doFilter(arg0, arg1);
} else {
resp.sendRedirect(failedForwardPage);
}
}
}
/**
* 从数据库中判断用户机的IP是否注册
*/
/*
* (non-Javadoc)
*
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
public void init(FilterConfig arg0) throws ServletException {
String s = arg0.getInitParameter("failedForwardPage");
if (s != null && "".equals(s.trim())) {
failedForwardPage = s;
}
initManagerPages();
}
private void initManagerPages() {
managerPages.add("/manageFrames2.htm");
managerPages.add("/dealPoweroff.jsp");
managerPages.add("/addMachine.jsp");
managerPages.add("/deleteUserResult.jsp");
managerPages.add("/delMachine.jsp");
managerPages.add("/delMachineResult.jsp");
managerPages.add("/helpMachine1.html");
managerPages.add("/helpMachine2.html");
managerPages.add("/helpMachine3.html");
managerPages.add("/helpMachine4.html");
managerPages.add("/helpUser1.html");
managerPages.add("/helpUser2.html");
managerPages.add("/helpUser3.html");
managerPages.add("/MachineState.jsp");
managerPages.add("/machineControl.jsp");
managerPages.add("/reMachine.jsp");
managerPages.add("/reMachineResult.jsp");
managerPages.add("/SystemConfiguration.jsp");
managerPages.add("/updateUser.jsp");
managerPages.add("/updateUserResult.jsp");
managerPages.add("/upload.jsp");
managerPages.add("/uploadSuccess(1).jsp");
managerPages.add("/viewMachineState.jsp");
managerPages.add("/queryUser.jsp");
managerPages.add("/queryUserResult.jsp");
managerPages.add("/addUser.jsp");
managerPages.add("/addUserResult.jsp");
managerPages.add("/deleteUser.jsp");
}
}
声明:以上代码非本人所作。