在web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面,而重定向到登陆界面的功能。

项目是用springMVC+spring+hibernate实现 (和这个没有多大关系)

第一步

首先写一个登录权限过滤类--LoginFilter类实现Filter接口

 package com.agen.util;

 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 org.springframework.util.Assert;
import org.springframework.util.StringUtils; import com.agen.entity.User; /**
* 首先写一个登录权限过滤类--LoginFilter类实现Filter接口
* @author 申旭栋
*下面这三个方法是必须要实现的
*/
public class LoginFilter implements Filter { @Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
} @Override
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
// 获得在下面代码中要用的request,response,session对象
HttpServletRequest servletRequest = (HttpServletRequest) request;
HttpServletResponse servletResponse = (HttpServletResponse) response;
HttpSession session = servletRequest.getSession(); // 获得用户请求的URI
String path = servletRequest.getRequestURI(); // 从session里取用户
User user = (User) session.getAttribute("user"); // 登陆页面无需过滤
if("/biologyInfo/".equals(path) || "/biologyInfo/login/login1.htmls".equals(path)) {
chain.doFilter(servletRequest, servletResponse);
return;
} // 判断如果没有取到用户信息,说明这个请求是没有登录就在请求 就跳转到登陆页面
if (user == null) {
// 跳转到登陆页面
servletResponse.sendRedirect("/biologyInfo/login/login1.htmls");
} else {
// 已经登陆,继续此次请求
chain.doFilter(request, response);
} } @Override
public void destroy() {
// TODO Auto-generated method stub
} }

第二步:

在web.xml中配置一下filter

 <!-- 配置 登陆 过滤器 -->
<filter>
<filter-name>login</filter-name>
<filter-class>com.agen.util.LoginFilter</filter-class>
</filter> <filter-mapping>
<filter-name>login</filter-name>
<url-pattern>*.htmls</url-pattern><!--此处写/*代表浏览器地址栏中的所有请求都会被拦截 包括css文件和js文件 .htmls这是仅拦截以.htmls结尾的请求 -->
</filter-mapping>

这样这个过滤器就写成了。

说明:

1.在web.xml中配置的filter的 <url-pattern>参数中的值,意思就是拦截的请求路径,就是浏览器的地址栏中的URL,因为页面上不论是页面,还是js文件,还是css文件都是通过请求得到的。

2.而上面的web.xml中配置的 <url-pattern>*.htmls</url-pattern>表示拦截仅拦截.htmls结尾的URL,而将js或者css文件结尾的URL都放过。

3.而访问页面都是通过以下这样的请求去访问的页面,

http://192.168.16.104:8080/biologyInfo/login/geneinfo.htmls

http://192.168.16.104:8080/biologyInfo/login/welcome1.htmls

而这些都是先去找了后台的controller,从服务器才去的页面

贴出服务器端的代码:

 package com.agen.controller;

 import java.util.UUID;

 import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import com.agen.entity.User;
import com.agen.service.AuthorityService;
import com.agen.service.RoleService;
import com.agen.service.UserSevice;
import com.fasterxml.jackson.annotation.JsonCreator.Mode; @Controller()
@RequestMapping("login")
public class LoginController { @Resource(name="userSevice")
private UserSevice userService; @Resource(name="roleService")
private RoleService roleService; @Resource(name="authorityService")
private AuthorityService authorityService; @Autowired
private SessionFactory sessionFactory; public Session getCurrentSession() {
// 需要开启事物,才能得到CurrentSession getCurrentSession()是获取已有的 没有 就创建新的
return sessionFactory.getCurrentSession();
} @RequestMapping("/login1")
public String login(User user, Model model,HttpServletRequest request){
if(user.getUserName()==null &&user.getPassword()==null){
model.addAttribute("error", "0");
return "../../../index";
}else{
Criteria criteria = getCurrentSession().createCriteria(User.class);
criteria.add(Restrictions.eq("userName", user.getUserName()));
User user2 = userService.uniqueResult(criteria);
if(user2 == null) {
model.addAttribute("error", "1");
return "../../../index";
} else if(!( user2.getPassword() .equals(user.getPassword()) )){
model.addAttribute("error", "2");
return "../../../index";
}
Assert.notNull(user);
HttpSession session = request.getSession();
session.setAttribute("user", user);
return "/index/index";
} } @RequestMapping("/register")
@ResponseBody
public boolean register(User user){
boolean flag = false;
user.setUserId(UUID.randomUUID().toString());
Criteria criteria = getCurrentSession().createCriteria(User.class);
criteria.add(Restrictions.eq("userName", user.getUserName()));
User user2 = userService.uniqueResult(criteria);
if(user2 != null){
flag = false;
}else{
userService.save(user);
flag = true;
}
return flag;
} /**
* 页面二级菜单
* @return
*/
@RequestMapping("/welcome1")
public String welcome(){ return "/index/welcome";
}
@RequestMapping("/geneinfo")
public String geneinfo(){
return "/geneinfo/geneinfoone";
} }

【Filter 不登陆无法访问】web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面的功能的更多相关文章

  1. 在web项目中搭建一个spring mvc + spring + mybatis的环境

    介绍:本文中示范搭建一个ssm环境的框架:使用流程就是客户端通过http请求访问指定的接口,然后由服务器接受到请求处理完成后将结果返回. 本项目请求流程细节介绍:由客户端请求到指定的接口,这个接口是个 ...

  2. asp.net Web项目中使用Log4Net进行错误日志记录

      使用log4net可以很方便地为应用添加日志功能.应用Log4net,开发者可以很精确地控制日志信息的输出,减少了多余信息,提高了日志记录性能.同时,通过外部配置文件,用户可以不用重新编译程序就能 ...

  3. web 项目中a标签传值(中文)到后台的乱码问题

    web 项目中a标签传值(中文)到后台的乱码问题 jsp页面中的a标签: .............. <c:forEach items="${sellerList }" v ...

  4. Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问

    本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这 ...

  5. 转 web项目中的web.xml元素解析

    转 web项目中的web.xml元素解析 发表于1年前(2014-11-26 15:45)   阅读(497) | 评论(0) 16人收藏此文章, 我要收藏 赞0 上海源创会5月15日与你相约[玫瑰里 ...

  6. web项目中解决post乱码和get乱码的方法

    前提复习编码问题产生的原因: 1.  什么是URL编码. URL编码是一种浏览器用来打包表单输入的格式,浏览器从表单中获取所有的name和其对应的value,将他们以name/value编码方式作为U ...

  7. 在web项目中使用shiro(认证、授权)

    一.在web项目中实现认证 第一步,在web项目中导入shiro依赖的包 第二步,在web.xml中声明shiro拦截权限的过滤器 <filter> <filter-name> ...

  8. 在Java web项目中防止用户注销后使用浏览器中的“后退”按钮返回注销前页面

    一背景 公司安全整改, 要求:系统中对于关键业务操作应确保使用浏览器"后退"功能无法回到上一步操作界面. 提供:凭证提供所有被检查系统关键业务操作后回退视频,视频显示关键业务操作后 ...

  9. 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入

    在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...

随机推荐

  1. Storm集成Kafka应用的开发

    我们知道storm的作用主要是进行流式计算,对于源源不断的均匀数据流流入处理是非常有效的,而现实生活中大部分场景并不是均匀的数据流,而是时而多时而少的数据流入,这种情况下显然用批量处理是不合适的,如果 ...

  2. 利用FFmpeg生成视频的缩略视频 v8.3

    目前生成视频缩略图的工具大多数是生成静态的图片,为了解决这样的局限性,这 次春节期间搞了个利用 FFMpeg 能生成缩略动态视频的批处理. 把 Make_NxM_videos.bat LED_font ...

  3. CentOS 7 关闭图形界面

    CentOS 7 关闭图形界面 查看/etc/inittab如下: # systemd uses 'targets' instead of runlevels. # by default, there ...

  4. FIX_前缀后缀_未提交

    问题 B: FIX 时间限制: 1 Sec  内存限制: 64 MB提交: 38  解决: 11[提交][状态][讨论版] 题目描述 如果单词 X 由单词 Y 的前若干个字母构成,我们称 X 是 Y ...

  5. 如何点击按钮后在加载外部的Js文件

    或许有朋友遇到过,想等自己点击按钮之后才执行某一个js文件,那么,你运气好,看到了我的代码了哈哈, <html> <head> <title></title& ...

  6. 如何将.il、.res文件封装成dll文件

    将你的.il..res文件保存在你的硬盘上,如下图: 我存放的路径在E盘的test文件夹中,我们开始封装了咯.进入DOS命令,如下图: 我们通过DOS命令先进入.il..res文件目录,如下图: 然后 ...

  7. asp.net DataSet数据导出到Excel中

    方法: [STAThread]///这是必须的    public override void VerifyRenderingInServerForm(System.Web.UI.Control co ...

  8. Ios cordova安装

    安装NODEJS:http://nodejs.org/ (如果你安装了旧版本的需要手动安装npm,不过最新版的自带了) 进入终端命令行使用npm安装cordova如下: $ sudo npm inst ...

  9. ios中通过调试来使用私有api

    转自:http://blog.csdn.net/cubepeng/article/details/11284173 OS不允许使用ios私有api,使用私有api可以获得意想不到的效果 ,同时使用私有 ...

  10. Android 在 manifest 文件里增加 versionCode,运行后版本并没有随之增加

    现象:从 git 上拉下来的代码中 versionCode 是8,versionName 是1.0.7但运行后的版本仍然是1.0.6 原因:全文搜索1.0.6之后发现在 bin 目录下也有一个 man ...