看了一下上学期学的项目,发现用到了jsp的filter来实现不同用户登录网站访问模块的分类,现在把代码分享出来跟大家共享一下···
package com.wws.filter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
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;
import com.wws.model.ConnDB;
import com.wws.model.UsersBean;
import com.wws.model.UsersBeanBO;
public class SecurityFilter implements Filter
{
private PreparedStatement ps = null;
private ResultSet rs = null;
private Connection ct = null;
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse rep,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) rep;
HttpSession session = request.getSession();
if(session.getAttribute("userInfo")!=null)
{
UsersBean ub=(UsersBean)session.getAttribute("userInfo");
int role_id=ub.getRole_id();
String sql="select role_name from Role where role_id="+role_id+"";
try{
ct=new ConnDB().getConn();
ps=ct.prepareStatement(sql);
rs=ps.executeQuery();
if(rs.next()){
//取出数据库的密码
String role_name=rs.getString(1).trim();
if("admin".equals(role_name)){
response.sendRedirect("person1.jsp");
}else if("educator".equals(role_name))
{
response.sendRedirect("ShowEC");
}else if("student".equals(role_name))
{
response.sendRedirect("person3.jsp");
//int user_id=ub.getUser_id();
//request.setAttribute("user_id", user_id);
//request.getRequestDispatcher("ShowSC").forward(request, response);
}else
{
//chain.doFilter(request,response);Filter依旧放行到action地址,若不处理只是打印日志的话
response.sendRedirect("ShowCourse");
}
}else
{
//chain参数用于控制是否放行用户请求
chain.doFilter(req, rep);
}
}
catch(Exception e){
e.printStackTrace();
}finally{
this.close();
}
}else
{
response.sendRedirect("");
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
public void close() { // 关闭各种打开的资源
try {
if (rs != null) {
rs.close();
rs = null;
}
if (ps != null) {
ps.close();
ps = null;
}
if (ct != null) {
ct.close();
ct = null;
}
} catch (Exception e) {
e.printStackTrace();// 打印异常,以便修改
}
}
}
在web.xml里面的配置:
<filter> <!-- Filter的名字,相当于指定@WebFilter的filterName属性 --> <filter-name>securityFilter</filter-name> <filter-class>com.wws.filter.SecurityFilter</filter-class> </filter> <filter-mapping> <filter-name>securityFilter</filter-name> <!-- Filter负责拦截的URL,相当于指定@WebFilter的urlPatterns属性,可以用/*拦截所有请求 --> <url-pattern>/securityFilter</url-pattern> </filter-mapping>
原文地址:http://blog.csdn.net/wws199304/article/details/44497211