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

1.首先编写验证登陆的过滤器

package danger.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; import danger.bean.sys.User; /**
* Servlet Filter implementation class LoginFilter
*/
public class LoginFilter implements Filter { /**
* Default constructor.
*/
public LoginFilter() {
// TODO Auto-generated constructor stub
} /**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
} /**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String path = req.getRequestURI();
System.out.println("reqURL----------" + path);
// 如果包含login.jsp证明是登陆就放行
if (path.contains("login") || path.contains("/js/") || path.contains("/image/") || path.contains("/css/")
|| path.contains("message.jsp")|| path.contains("404.jsp")|| path.contains("/images/")) {
chain.doFilter(request, response); // 放行
return;
}
HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = req.getSession();
User user = (User) session.getAttribute("user");
// 如果session中存在user证明用户登录,可以放行。否则认为未登陆重定向到login.jsp
if (user == null) {
res.sendRedirect(req.getContextPath() + "/login/login.jsp");
} else {
System.out.println("user----------"+user);
chain.doFilter(request, response);
} } /**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
} }

  if (path.contains("login") || path.contains("/js/") || path.contains("/image/") || path.contains("/css/") || path.contains("message.jsp")|| path.contains("404.jsp")|| path.contains("/images/")) { chain.doFilter(request, response); // 放行 return; }      相当于是对登陆请求以及一些静态资源放行。(可以将一些静态资源放到统一的文件夹下面)

 2.web.xml进行配置

    <filter>
<filter-name>loginFilter</filter-name>
<filter-class>danger.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

 3.进行测试:

项目名字为danger。再浏览器访问:http://localhost/danger/

控制台打印:

reqURL----------/danger/login/login.jsp
reqURL----------/danger/js/jquery-1.11.js
reqURL----------/danger/controls/login/js/gVerify.js
reqURL----------/danger/controls/login/css/login2.css
reqURL----------/danger/controls/login/js/login.js
reqURL----------/danger/image/logo.png
reqURL----------/danger/controls/login/images/1.jpg

 

 页面被送到登陆界面。

aaarticlea/png;base64,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" alt="" />

4.对登陆的处理:(判断用户名与密码,并在session中添加user属性)

登陆表单(用户名与密码的name与Action的属性名字一样)

                    <form action="<%=path %>/login.action" name="loginform" accept-charset="utf-8" id="login_form" class="loginForm"
method="post"><input type="hidden" name="did" value="0"/>
<input type="hidden" name="to" value="log"/>
<div class="uinArea" id="uinArea">
<label class="input-tips" for="u">帐 &nbsp;号:</label>
<div class="inputOuter" id="uArea">
<input type="text" id="u" name="username" class="inputstyle"/>
</div>
</div>
<!--密码-->
<div class="pwdArea" id="pwdArea">
<label class="input-tips" for="p">密 &nbsp;码:</label>
<div class="inputOuter" id="pArea">
<input type="password" id="p" name="password" class="inputstyle"/>
</div>
</div>
<!--验证码-->
<div class="yzmArea" id="verifyArea">
<label class="input-tips" for="code_input">验证码:</label>
<div class="inputOuter" id="yArea">
<input type="text" id="code_input" name="y" class="inputstyle"/>
<div id="v_container"></div>
</div>
</div>
<!--登录按钮--> <div id="loginbuttondiv" class="inputOuter">
<input type="submit" value="登 录" class="button_blue" id="my_button"/>
</div>
</form>

处理登陆的action

静态模拟两个用户,并未用户分配不同的权限。(2代表是超级用户,可以进行系统管理)

package danger.action.queryView;

/**
* 登陆Action
*/
import java.util.HashMap;
import java.util.Map; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller; import com.opensymphony.xwork2.ActionSupport; import danger.bean.sys.User;
import danger.utils.ValidateCheck; @Controller
@Scope("prototype")
public class LoginAction extends ActionSupport {
private Map<String, Object> result;
private String username;
private String password;
private User user; @Override
public String execute() throws Exception {
result = new HashMap();
// 获取session
HttpSession session = ServletActionContext.getRequest().getSession();
// 用户名与密码不为空进行登陆验证
if (ValidateCheck.isNotNull(username) && ValidateCheck.isNotNull(password)) {
// 模拟登陆成功后session中添加user
if ("root".equals(username) && "123456".equals(password)) {
user = new User();
user.setUsername(username);
user.setRole(2);
session.setAttribute("user", user);
return SUCCESS;
}
if ("信息录入人员".equals(username) && "123456".equals(password)) {
user = new User();
user.setRole(1);
user.setUsername(username);
session.setAttribute("user", user);
return SUCCESS;
}
}
// 来到这里证明登陆未成功
result.put("msg", "账户或者密码错误");
return ERROR;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public Map getResult() {
return result;
} public void setResult(Map result) {
this.result = result;
} public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
}
}

struts.xml   配置(登陆成功后进入主页,失败后到message.jsp显示错误信息)

        <!-- 登陆 -->
<action name="login" class="loginAction">
<result name="success" type="redirect">/index.jsp</result>
<result name="error">/message.jsp</result>
</action>

5.退出系统的处理(删除session中的user,并将用户重定向到一个页面)

处理退出的Action(清除session)

package danger.action.queryView;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller; import com.opensymphony.xwork2.ActionSupport;
@Controller
@Scope("prototype")
public class LogoutAction extends ActionSupport { @Override
public String execute() throws Exception {
// 获取session
HttpSession session = ServletActionContext.getRequest().getSession();
// 清空session中的用户
session.removeAttribute("user");
return super.execute();
}
}

struts.xml配置Action

        <!-- 退出 -->
<action name="logout" class="logoutAction">
<!-- 成功后送到登陆页面 -->
<result name="success" type="redirect">/login/login.jsp</result>
</action>

退出系统按钮

<a href=javascript:void(0)
style="text-decoration: none; color: white;" onclick="logout()"><span>退出系统</span></a>

处理退出系统的JS函数

    <script type="text/javascript">
function logout() {
if (confirm("确定退出系统?")) {
window.location.href = "${baseurl}/logout.action"
}
}
</script>

JavaEE中Filter实现用户登录拦截的更多相关文章

  1. 过滤器(filter)实现用户登录拦截

    过滤器(filter)实现用户登录拦截 >>>>>>>>>>>>>>>>>>>> ...

  2. 用户登录拦截器查询到登录用户后如何将用户信息传递到后面的Controller

    taotao创建订单代码中之前忘了加入用户信息,那么加上呢? 分析:用户创建订单的时候,我们会强制要求用户先登录,也就是说,创建订单的Controller执行时,一定是用户已经登录了的,而用户只要登录 ...

  3. 在Ubuntu中增加root用户登录

    一:增加root用户登录 1.打开终端,输入:sudo gedit /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 2.在弹出的编辑框里输入:gree ...

  4. spring boot 使用拦截器 实现 用户登录拦截

    登录拦截和和权限拦截实现类似   首先自定义一个[DefineAdapter]类,这个类我是用来放自定义的配置(比如 自定义请求参数,自定义拦截器等),集成WebMvcConfigurerAdapte ...

  5. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-10.Springboot2.x用户登录拦截器开发实战

    笔记 10.Springboot2.x用户登录拦截器开发实战     简介:实战开发用户登录拦截器拦截器 LoginInterceptor                  1.实现接口 LoginI ...

  6. SpringMVC拦截器实现用户登录拦截

    本例实现登陆时的验证拦截,采用SpringMVC拦截器来实现 当用户点击到网站主页时要进行拦截,用户登录了才能进入网站主页,否则进入登陆页面 核心代码 首先是index.jsp,显示链接 1 < ...

  7. Oracle 12c中新建pdb用户登录问题分析

    Oracle 12c新建用户登录问题分析1 用sys用户新建用户,提示公用用户名或角色名无效.原因:Oracle 12c中,在容器中建用户(或者应该称为使用者),须在用户名前加c##.默认登录连接的就 ...

  8. net mvc中实现记录用户登录信息(记住登录效果)

    现记录用户登录信息(记住登录效果) 本文讲述了使用cookies实现网站记住登录效果,效果如下: 主要实现方法,当用户选择记住登录时建立cookies保存用户名和用户密码,当用户登录不选择记住登录时, ...

  9. JavaWeb 之 Filter 验证用户登录案例

    需求: 1. 访问一个网站的资源.验证其是否登录 2. 如果登录了,则直接放行. 3. 如果没有登录,则跳转到登录页面,提示"您尚未登录,请先登录". 代码实现: import j ...

随机推荐

  1. hasattr() & getattr() & setattr()

    Python的hasattr() getattr() setattr() 函数使用方法详解   感谢作者 ---> 原文链接 hasattr(object, name) 判断一个对象里面是否有n ...

  2. 分布式爬虫:使用Scrapy抓取数据

    分布式爬虫:使用Scrapy抓取数据 Scrapy是Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘. ...

  3. Java实现系统目录实时监听更新。

    SDK1.7新增的nio WatchService能完美解决这个问题.美中不足是如果部署在window系统下会出现莫名其妙的文件夹占用异常导致子目录监听失效,linux下则完美运行.这个问题着实让人头 ...

  4. 从Wireshark看TCP连接的建立与关闭

    TCP是一种面向连接.可靠的协议.TCP连接的建立与断开,都是需要经过通信双方的协商.用一句话概括就是:三次握手say hello(建立连接):四次握手say goodbye(断开连接).要了解TCP ...

  5. 十、mysql之索引原理与慢查询优化

    mysql之索引原理与慢查询优化 一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还 ...

  6. Android开发——事件分发机制详解

    0. 前言   转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52566965 深入学习事件分发机制,是为了解决在Android开发中 ...

  7. Idea中maven依赖图查看

    技术交流群: 233513714 使用Intellij idea,想看看它的maven依赖图,根据eclipse的经验,不是很容易能找到Intellij idea对应的功能.在打开的pom.xml文件 ...

  8. java从数据库读取菜单,递归生成菜单树

    首先看一下菜单的样子 根据这个样子我们定义菜单类 public class Menu { // 菜单id private String id; // 菜单名称 private String name; ...

  9. ajax跨域请求_url:http://XXX

    利用别的项目提供的一个接口,传入用户名和密码,根据返回的结果判断登陆成功与否. 不经过后台,在js中用ajax实现.对ajax而言,发送跨域请求,与一般写法不同. 如果支持jsonp,则将dataTy ...

  10. 每天一个Linux命令(11):cat命令

    cat命令连接文件并打印到标准输出设备上. 注意:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容.因此,一般用more等命令分屏显示.为了控制滚屏,可以按Ctrl+S键,停止滚 ...