用户登录以及过滤器

过滤器:
1,写一个普通的类实现filter接口
2,实现其中的doFilter方法,这里写业务
3,在web.xml中配置过虑器

用户登录:

1.写好登录的dao,service类和相应方法;

2.前台写一个form,包含帐号和密码两个input;提交时url写查询登录用户的servlet的url

3.后台拿到前台传过来的参数,以此为条件进行查询

此处只写重点

LoginDaoImpl

package dao.impl;

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import util.DbUtil;
import dao.LoginDao;
import entity.U;

public class LoginDaoImpl implements LoginDao {

QueryRunner qr = DbUtil.getQueryRunner();
@Override
public U login(U u) {
String sql="select*from u where name=? and password=?";
U uu=new U();
try {
uu=qr.query(sql, new BeanHandler<U>(U.class),u.getName(),u.getPassword());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return uu;
}

}

LoginServiceImpl

package service.impl;

import service.LoginService;
import dao.LoginDao;
import dao.impl.LoginDaoImpl;
import entity.U;

public class LoginServiceImpl implements LoginService {

private LoginDao loginDao=new LoginDaoImpl();
@Override
public U login(U u) {
U uu = loginDao.login(u);
return uu;
}

}

LoginServlet

package servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import service.LoginService;
import service.impl.LoginServiceImpl;
import entity.U;

public class LoginServlet extends HttpServlet {

private LoginService loginService=new LoginServiceImpl();

@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String name = request.getParameter("name");
String password = request.getParameter("password");
try {
U u=new U();
u.setName(name);
u.setPassword(password);
U uu = loginService.login(u);

if(uu!=null){
request.getSession().setAttribute("u", uu);
request.getRequestDispatcher("/empList").forward(request, response);
}else{
request.getSession().setAttribute("message", "用户名或密码错误,请重试");
response.sendRedirect(request.getContextPath()+"/userlogin.jsp");
}
} catch (Exception e) {
e.printStackTrace();
response.sendRedirect(request.getContextPath()+"/error.jsp");
}

}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}

LoginFilter.java

package 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;
//登录过滤器
public class LoginFilter implements Filter {

@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest)arg0;
HttpServletResponse response=(HttpServletResponse)arg1;
//设置字符编码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//拿到请求的uri,如;/servletTest/login
String uri = request.getRequestURI();
System.out.println("uri======"+uri);
//拿到uri中第二个“/”的下标
int index = uri.lastIndexOf("/");
System.out.println("/的下标是:"+index);
//截取从第二个“/”开始到最后的所有字符,判断当前访问的是哪个方法
String method = uri.substring(index+1);
System.out.println("当前访问的方法---"+method);
//如果是登录请求或者访问登录页面,则放行
if("login".equals(method)||"userlogin.jsp".equals(method)||"".equals(method)){
//放行
System.out.println("已放行");
chain.doFilter(request,response);
}else{//不是登录请求
//拿到session,判断session中有没有保存的登录信息
System.out.println("不放行");
Object obj = request.getSession().getAttribute("u");
if(obj!=null){
//session中有保存的用户信息,证明已登录,放行
chain.doFilter(request, response);
}else{
//否则就是没登录,不予放行
request.setAttribute("message", "请先登录");
request.getRequestDispatcher("/userlogin.jsp").forward(request, response);
}
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
@Override
public void destroy() {
}
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>servletTest</display-name>
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<!-- 对所有的请求拦截判断 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>servlet.LoginServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>count</servlet-name>
<servlet-class>servlet.CountServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>addEmp</servlet-name>
<servlet-class>servlet.AddEmpServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>deleteEmp</servlet-name>
<servlet-class>servlet.DeleteEmpServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>findUpdEmp</servlet-name>
<servlet-class>servlet.FindUpdEmpServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>updateEmp</servlet-name>
<servlet-class>servlet.UpdateEmpServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>findEmp</servlet-name>
<servlet-class>servlet.FindEmpServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>empList</servlet-name>
<servlet-class>servlet.FindEmpsServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>count</servlet-name>
<url-pattern>/count</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>addEmp</servlet-name>
<url-pattern>/addEmp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>deleteEmp</servlet-name>
<url-pattern>/deleteEmp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>findUpdEmp</servlet-name>
<url-pattern>/findUpdEmp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>updateEmp</servlet-name>
<url-pattern>/updateEmp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>findEmp</servlet-name>
<url-pattern>/findEmp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>empList</servlet-name>
<url-pattern>/empList</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>userlogin.jsp</welcome-file>
</welcome-file-list>
</web-app>

userlogin.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>用户登录页面</title>
</head>
<body>
<form action="/servletTest/login" method="post">
<h2>用户登录</h2>
帐号:<input type="text" name="name"/><p>
密码:<input type="text" name="password"/><p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" value="提交"/><p>
${message }
</form>
</body>
</html>

时间: 2024-08-09 10:14:05

用户登录以及过滤器的相关文章

MVC下用户登录状态校验的问题以及解决方案--------------Action全局过滤器的使用

前言当我们访问某个网站的时候需要检测用户是否已经登录(通过Session是否为null),我们知道在WebForm中可以定义一个BasePage类让他继承System.Web.UI.Page,重写它的OnInit()方法,在OnInit()中判断Session中是否有用户登录的信息 1 /// <summary> 2 /// 公共基类里面干一些公共的事情 3 /// </summary> 4 public class BasePage : System.Web.UI.Page 5

javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册

一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JSP+JavaBean开发模式,通过这个用户登录注册程序综合案例,把之前的学过的XML.Xpat

简单实现 Webapi 用户登录访问权限

总结一下上一个项目中对webapi 用户登录权限控制的设计 目的:前端可以根据接口的状态码来判断用户的登录状态,以及访问权限 1.首先我们在webconfig里面添加一条配置,用于开启或关闭权限控制 <appSettings> <add key="WebApiAuthFlag" value="true" /> </appSettings> 2.先了解一下 ActionFilterAttribute 这个类,该类可以在action方

javaweb学习总结——基于Servlet+JSP+JavaBean开发模式的用户登录注册

一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JSP+JavaBean开发模式,通过这个用户登录注册程序综合案例,把之前的学过的XML.Xpat

同一账号,后一用户登录,前一个用户则被踢掉

原理:将已登录用户保存在数据库或者application或静态List(Map)里, 主要保存 session对象,登录账号id 等 每一个用户进行登录时去查看是否已经登陆过, 如果已登录,则取出其session然后将登陆账号id从session里移除 在过滤器里进行登录与否的判断 下面是一些详细步骤: 1.登录页面  login.jsp <%@ page language="java" contentType="text/html; charset=utf-8&quo

.NET单点登录之过滤器(filter)--【SSO】

在.NET单点登录的探索中,用到一个知识点:过滤器(filter).常见的几种验证:Authorization filters,验证用户是否有权限访问页面:Action Filter,验证用户登录的时候是否用户信息存在:异常处理,比如session过期后可以返回登录页面等等. 一.Filter包含什么? filter主要分为四种,遍布于MVC,从页面请求到授权,到访问资源的各个阶段. Authorization filters:用于处理验证处理相关的操作 Action filters:在Cont

JavaEE中Filter实现用户登录拦截

实现思路是编写过滤器,如果用户登录之后session中会存一个user.如果未登录就为null,就可以通过过滤器将用户重定向到登陆页面,让用户进行登陆,当然过滤器得判断用户访问的如果是登陆请求需要放行,如果不是就需要进行拦截并进行验证.登陆成功再session存存入user,这样过滤器每次都会通过. 1.首先编写验证登陆的过滤器 package danger.filter; import java.io.IOException; import javax.servlet.Filter; impo

ssh框架的小实例(用户登录)

刚学SSH框架写一个小实例,以便以后查看: 本案例简单的实现一个用户登录: 数据库方面就不写了,自己领悟吧!哈哈(根据user.hbm.xml文件就知道了) 我们一般可以创建下面几个包,什么意思呢,自己悟 com.website.action.user com.website.dao com.website.dao.impl com.website.entity com.website.service com.website.service.impl 下面开始码代码了: com.website.

java—不同的用户登录以后可以看到不同的菜单(后台可以实现对用户菜单的管理) 1 (55)

实现不同的用户登录以后可以看到不同的菜单.(后台可以实现对用户菜单的管理.) 第一步:分析数据结构        1:用户表 表名:users 列名 类型 说明 id Varchar(32) 主键 name Varchar(30)         2:菜单表 第二步:写入表中几行数据进行基本分析 insert into users values('U001','Jack','1234'); insert into users values('U002','张三','4321'); insert