结合DAO、filter实现用户登录

学完今天的理论知识,结合DAO设计模式,实现一个用户登录,通过session传递值、filter过滤器过滤,判断用户没有登录成功,直接通过网址进入登录成功后的页面会跳转至登录页面。


oracle数据库:



上myeclipse代码:

UserBean类:

public class UserBean {
	private int userid;
	private String username;
	private String userpwd;
	/** 为1则账号密码正确
	 *  为0则账号密码错误
	 **/
	private int state;
	
	public int getUserid() {
		return userid;
	}
	public void setUserid(int userid) {
		this.userid = userid;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getUserpwd() {
		return userpwd;
	}
	public void setUserpwd(String userpwd) {
		this.userpwd = userpwd;
	}
	public int getState() {
		return state;
	}
	public void setState(int state) {
		this.state = state;
	}
	
}

UserDao接口:定义了根据用户名查询用户信息的方法。

public interface UserDao {
	public UserBean findUser_ByID(String username);	
}


UserDaoImple类:继承UserDao,实现方法。


public class UserDaoImple implements UserDao{
	private PreparedStatement pre = null;
	private ResultSet rs = null;
	
	public UserBean findUser_ByID(String username) {
		Connection conn = DBUtils.getConn();
		UserBean userBean = null;
		String sql = "select userid,username,userpwd from tb_user where username = ?";
		try {
			pre = conn.prepareStatement(sql);
			pre.setString(1, username);
			rs = pre.executeQuery();			
			
			if(rs.next()){
				userBean = new UserBean();
				userBean.setUserid(rs.getInt(1));
				userBean.setUsername(rs.getString(2));
				userBean.setUserpwd(rs.getString(3));	
				
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally{
			DBUtils.close(conn, pre, rs);
		}
				
		return userBean;
	}
	
}


DaoFactory类:Dao工厂类,控制Dao的实例为单例

public class DaoFactory {
	private static UserDao userDao = null;

	
	public static UserDao getUserDao(){
		if(userDao==null){
			userDao = new UserDaoImple();
		}
		return userDao;
	}
	
	
	
}


定义一个UserServiceImple类,完成登录业务逻辑


public class UserServiceImple implements UserService{
	private UserDao userDao = null;
	
	public UserBean login(String username, String userpwd) {
		userDao = DaoFactory.getUserDao();
		UserBean userBean = userDao.findUser_ByID(username);
		
		if(userBean ==null){
			return null; //用户不存在
		}else if(username.equals(userBean.getUsername())&&userpwd.equals(userBean.getUserpwd())){
			userBean.setState(1);
		}else{
			userBean.setState(0);
		}
		return userBean;
	}

}

LoginServlet类:登录服务端与客户端交互

public class LoginServlet extends HttpServlet{
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html;charset=utf-8");
	
		String username = req.getParameter("userName");
		String userpwd = req.getParameter("userPwd");
		
		UserService userService = ServiceFactory.getUserService();
		UserBean userBean = userService.login(username, userpwd);
		if(userBean==null){
			resp.sendRedirect("userlogin.jsp");
		}else if(userBean.getState()==1){
			HttpSession session = req.getSession();
			session.setAttribute("Login", userBean);
			resp.sendRedirect("main.jsp");
		}else if(userBean.getState()==0){
			resp.sendRedirect("userlogin.jsp");
		}
	
	
	}

}

DBUtils类:封装了工具类,连接数据库

public class DBUtils {
	private static Properties properties = new Properties();
	private static String url = "";
	private static String userName = "";
	private static String pwd = "";
	static{
		String config = "db.properties";
		try {
			properties.load(DBUtils.class.getClassLoader().getResourceAsStream(config));
			String Driver = properties.getProperty("driverstr");
			url = properties.getProperty("url");
			userName = properties.getProperty("username");
			pwd = properties.getProperty("password");
			Class.forName(Driver);		
		
		
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}finally{
			
			
		}
		
		
	}
	
	public static Connection getConn(){
		try {
			return DriverManager.getConnection(url, userName, pwd);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	
	 public static void close(Connection conn,PreparedStatement pre ,ResultSet rs) {
			if (rs != null) {
				try {
					rs.close();
					rs=null;
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (pre != null) {
				try {
					pre.close();
					pre=null;
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (conn != null) {
				try {
					conn.close();
					conn=null;
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	
}



LoginFilter类:登录过滤器,如果拦截到session没有从LoginServlet获取到用户名和密码,则跳转至登录界面

public class LoginFilter implements Filter {
	UserBean userBean =null;
	public void destroy() {
		
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain filter) throws IOException, ServletException {
		// TODO Auto-generated method stub
		HttpServletRequest  httpRequest = (HttpServletRequest)request;
		HttpServletResponse httpResponse = (HttpServletResponse)response;
		HttpSession session = httpRequest.getSession();
		userBean = (UserBean)session.getAttribute("Login");
		//如果没有值,则跳转到userlogin
		if(userBean==null){
			httpResponse.sendRedirect("userlogin.jsp");
		}else{
			filter.doFilter(request, response);
		}
		
		
	}

	public void init(FilterConfig arg0) throws ServletException {

	}

}

xml配置文件


<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
  	<servlet-name>loginServlet</servlet-name>
  	<servlet-class>org.great.servlet.LoginServlet</servlet-class>
  </servlet>  
  <servlet-mapping>
  	<servlet-name>loginServlet</servlet-name>
  	<url-pattern>/login</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>drivingServlet</servlet-name>
  	<servlet-class>org.great.servlet.DrivingServlet</servlet-class>
  </servlet>  
  <servlet-mapping>
  	<servlet-name>drivingServlet</servlet-name>
  	<url-pattern>/driving</url-pattern>
  </servlet-mapping>
  
  <filter>
  	<filter-name>loginFilter</filter-name>
  	<filter-class>org.great.filter.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>loginFilter</filter-name>
  	<url-pattern>/main.jsp</url-pattern>
  </filter-mapping>
  
</web-app>

接下来看效果图:

登录界面,输入账号密码:



输入正确,跳转:



验证:未登录,直接输入正确的登录后的地址:



则成功跳转回登录界面:














  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值