在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. 18. javacript高级程序设计-JavaScript与XML

    1. JavaScript与XML IE采取了下列方式: l 通过ActiveX对象来支持处理XML,而相同的对象也可以用来构建桌面应用程序 l Windows携带了MSXML库,JavaScript ...

  2. JAVA thread0.interrupt()方法

    interrupt()只是改变中断状态而已,interrupt()不会中断一个正在运行的线程.这一方法实际上完成的是,给受阻塞的线程抛出一个中断信号,这样受阻线程就得以退出阻塞的状态. 更确切的说,如 ...

  3. ABAP 权限程序

    检查用户销售区域与分销渠道的权限     AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'     ID 'VKORG' FIELD wa_all-vkorg     ID 'V ...

  4. 微信video标签全屏无法退出bug 本文系转载

    安卓(android)微信里面video播放视频,会被强制全屏,播放完毕后还有腾讯推荐的视频,非常讨厌..强制被全屏无法解决,但是视频播放完毕后退出播放器可以解决.方法就是视频播放完毕后,用音频aud ...

  5. 数据结构顺序表删除所有特定元素x

    顺序表类定义: template<class T> class SeqList : { public: SeqList(int mSize); ~SeqList() { delete[] ...

  6. 【编程题目】在一个字符串中找到第一个只出现一次的字符。如输入 abaccdeff,则输出 b。

    第 17 题(字符串):题目:在一个字符串中找到第一个只出现一次的字符.如输入 abaccdeff,则输出 b. 思路:此题非常容易. 最开始是想开辟一块空间存储每个字符出现的次数. 但转念一想,似乎 ...

  7. 未将对象引用设置到对象的实例 启用 JIT 调试后,任何无法处理的异常

    严谨!!!! DataSet ds = salarySum.GetDataSalarySum2(libUser.SelectedValue, dtpMonth.Value.Date);         ...

  8. HDU 4320 Arcane Numbers 1 (质因子分解)

    题目:传送门. 题意:将一个A进制下的有限小数转化为B进制看是否仍为有限小数. 题解:一个A进制的小数可以下次 左移动n位变成A进制整数然后再将其转化为B进制即可 即B^m/A^n要整除,因此A的质因 ...

  9. 【python升级录】--列表,元组

    本节内容 字符串格式化输出 数据运算 for循环 while循环 列表 元组 [字符串格式化输出] 占位符 %s—string,%d—digital,%f —float # __author:&quo ...

  10. [Android] 查看Android中的AlarmManager事件

    reference to : https://segmentfault.com/a/1190000000404684 有时候我们需要设置一个alarmmanager事件 但是如果这个事件的时间是凌晨三 ...