- 浏览: 503098 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (156)
- xml (4)
- web前端 (24)
- jQuery (18)
- java (38)
- SQL (9)
- perl (2)
- OTRS (1)
- GWT (4)
- Linux (32)
- Maven (2)
- Spring (2)
- Oracle Win7 (1)
- css (8)
- eclipse (3)
- mysql (11)
- tomcat (5)
- git (4)
- javascript (22)
- font (1)
- android (1)
- log4j (1)
- email (1)
- sublime plugin (1)
- html (2)
- matches (1)
- php (3)
- apache (3)
- gd (1)
- docker (5)
- rails (1)
- RabbitMQ (1)
- Ubuntu (3)
- L2TP VPN (1)
- nodejs (1)
- oraclejet (1)
- ubutun (1)
- ntp (1)
- ngix (1)
- ssl (1)
- https (1)
- Linux,Debian (2)
- dpkg (1)
- pac (1)
- vi (1)
- vim (1)
- java,http (0)
- httpClient (0)
- shutter (1)
- shell (1)
- redmine (1)
最新评论
-
纵观全局:
配置之后,连接显示不是私密连接
keytool生成证书与Tomcat SSL配置 -
zhuchao_ko:
可以 伪造
java获得ip地址 -
longhua2003:
代码太乱了
java下载文件 -
tomhat:
ccx410 写道 安装gwt报错,unable to ret ...
GWT CellTable -
ccx410:
安装gwt报错,unable to retrieve osgi ...
GWT CellTable
我们经常会碰到这样的情况,当我们有事情离开了一会,等再回来继续我们在网页中的操作时,会出现session超时的错误,然后跟上一堆的错误,让用户感觉很不爽,像这种情况如果能在一个错误页面给个Session超时的提示就会比较友好些,再一种情况,当一个系统中的用户角色有多个,有些页面对于一些级别低的用户来说是没有权限观看的,可能在页面上能根据不同的权限屏蔽了一些链接让低级别的用户无法进入,但是这只能让低级别的用户看不见高级操作的链接,假如用户知道链接的地址直接在地址栏中输入链接,岂不是也可以进入系统啊,要解决这两个问题就得在页面中做判断了。
If(session == null) {
//如果是超时则跳转到登陆页面重新登陆
}
If(checkAuthority() == false) {
//如果权限不足则跳转到错误页面给个提示
}
每个.jsp页面中加上以上的判断貌似能够解决问题,然而一个系统往往有成百上千的jsp页面,倘若每个页面都这样加岂不是很费事,而且如果将来的权限判断发生变化,将要维护所有的jsp这样的工作量是很大的,灵活性很差,要是在进入这些jsp之前必须统一经过一个地方,在这个地方来做判断貌似要好一下,我们使用了过滤器来解决了这个问题
新建一个过滤器命名为:FilterDemo,该类继承自:javax.servlet.Filter
public class FilterDemo implements Filter{
public void destroy() {}
public void doFilter(ServletRequest sreq, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest)sreq;
HttpSession session = request.getSession(false);
if(session == null) {
//如果是session超时,在此处做处理
}
if(request.getRequestURI().endsWith("download.do")) {
//此处可以针对不同的请求根据用户是否具有权限来做处理
}
request.getRequestDispatcher("/Error.jsp").forward(request,response);
}
public void init(FilterConfig filterConfig)throws ServletException {}
}
然后将新建的Filter添加到web.xml中,部署Filter需要添加两部分:
1.filter元素
filter元素位于部署描述符文件(web.xml)的前部,所有filter-mapping、servlet或servlet-mapping元素之前。
<filter>
<filter-name>SessionFilter</filter-name>
<filter-class>myPackage.FilterDemo</filter-class>
</filter>
2.filter-mapping元素
filter-mapping元素位于web.xml文件中filter元素之后serlvet元素之前
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
以上内容表示所以的请求中以.do结尾的都有首先通过我们这里指定的过滤器:
新建一个Servlet来测试:
public class DownLoadDemo extends HttpServlet {
private static final long serialVersionUID = 1L;
public DownLoadDemo() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/DownLoadExcel.jsp").forward(request, response);
}
}
在web.xml中部署好该servlet
<servlet>
<servlet-name>DownLoadDemo</servlet-name>
<servlet-class>com.sinosoft.base.sessiondemo.DownLoadDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownLoadDemo</servlet-name>
<url-pattern>/download</url-pattern>
</servlet-mapping>
新建jsp来测试
Index.jsp
<body>
<form action="download.do">
<h1>This is a Demo Application</h1>
<a href = 'DownLoadExcel.jsp'>导出Excel</a>
<input type='submit'>
</form>
</body>
为了便于对比我们使用了一个是超链接的形式,一个是通过servlet来跳转,当点击提交按钮时会被拦截,而直接点击超链接就不会被拦截,因为我们的Filter中配置的是拦截.do形式的,如果要拦截jsp也可以使用<url-pattern>DownLoadExcel.jsp </url-pattern>
再添加一个错误页面Error.jsp
<body>
<h1>对不起,你没有权限</h1>
</body>
If(session == null) {
//如果是超时则跳转到登陆页面重新登陆
}
If(checkAuthority() == false) {
//如果权限不足则跳转到错误页面给个提示
}
每个.jsp页面中加上以上的判断貌似能够解决问题,然而一个系统往往有成百上千的jsp页面,倘若每个页面都这样加岂不是很费事,而且如果将来的权限判断发生变化,将要维护所有的jsp这样的工作量是很大的,灵活性很差,要是在进入这些jsp之前必须统一经过一个地方,在这个地方来做判断貌似要好一下,我们使用了过滤器来解决了这个问题
新建一个过滤器命名为:FilterDemo,该类继承自:javax.servlet.Filter
public class FilterDemo implements Filter{
public void destroy() {}
public void doFilter(ServletRequest sreq, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest)sreq;
HttpSession session = request.getSession(false);
if(session == null) {
//如果是session超时,在此处做处理
}
if(request.getRequestURI().endsWith("download.do")) {
//此处可以针对不同的请求根据用户是否具有权限来做处理
}
request.getRequestDispatcher("/Error.jsp").forward(request,response);
}
public void init(FilterConfig filterConfig)throws ServletException {}
}
然后将新建的Filter添加到web.xml中,部署Filter需要添加两部分:
1.filter元素
filter元素位于部署描述符文件(web.xml)的前部,所有filter-mapping、servlet或servlet-mapping元素之前。
<filter>
<filter-name>SessionFilter</filter-name>
<filter-class>myPackage.FilterDemo</filter-class>
</filter>
2.filter-mapping元素
filter-mapping元素位于web.xml文件中filter元素之后serlvet元素之前
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
以上内容表示所以的请求中以.do结尾的都有首先通过我们这里指定的过滤器:
新建一个Servlet来测试:
public class DownLoadDemo extends HttpServlet {
private static final long serialVersionUID = 1L;
public DownLoadDemo() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/DownLoadExcel.jsp").forward(request, response);
}
}
在web.xml中部署好该servlet
<servlet>
<servlet-name>DownLoadDemo</servlet-name>
<servlet-class>com.sinosoft.base.sessiondemo.DownLoadDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownLoadDemo</servlet-name>
<url-pattern>/download</url-pattern>
</servlet-mapping>
新建jsp来测试
Index.jsp
<body>
<form action="download.do">
<h1>This is a Demo Application</h1>
<a href = 'DownLoadExcel.jsp'>导出Excel</a>
<input type='submit'>
</form>
</body>
为了便于对比我们使用了一个是超链接的形式,一个是通过servlet来跳转,当点击提交按钮时会被拦截,而直接点击超链接就不会被拦截,因为我们的Filter中配置的是拦截.do形式的,如果要拦截jsp也可以使用<url-pattern>DownLoadExcel.jsp </url-pattern>
再添加一个错误页面Error.jsp
<body>
<h1>对不起,你没有权限</h1>
</body>
发表评论
文章已被作者锁定,不允许评论。
-
javascript 监听键盘事件
2017-04-14 10:38 2765var ie; var firefox; ... -
JavaScript从数组中删除指定值元素的方法
2016-10-11 13:13 726下面的代码使用了两种方式删除数组的元素,第一种定义一个单独的函 ... -
CSS几种特效整理
2016-04-19 09:55 503css用伪类before和after制作三角形箭头网上有一堆教 ... -
js 一些知识,js获取contxtPath
2015-11-12 13:49 1169var num = 1; var str = '1'; ... -
IE指定文档模式
2015-10-15 15:21 933对于 Web 开发人员来说,文本兼容性是一个要考虑的重要问题。 ... -
JSP和JSTL获取服务器参数
2015-09-11 13:57 1167<%@ page language="java ... -
如何在一个页面上让多个jQuery版本共存
2014-09-10 10:22 882如何在一个页面上让多个jQuery共存呢?比如jquery-1 ... -
javascript Date Format
2014-07-07 23:14 875// 对Date的扩展,将 Date 转化为指定格式的Stri ... -
CSS控制文字只显示一行,超出部分显示省略号
2014-07-04 17:40 4626<style type="text/css&q ... -
jQuery仿腾讯云滑动下拉导航菜单效果代码
2014-07-03 17:13 2914<!DOCTYPE html> <html& ... -
javascript按回车直接提交表单
2014-06-19 12:29 819<script> document.onkeydo ... -
css + javascript 制作tips
2014-06-06 15:43 950<!DOCTYPE html> <html& ... -
轻量级 css3 tooltips 信息提示框
2014-06-06 13:53 905<!DOCTYPE html> <html& ... -
javascript获取兄弟节点的两种方法
2014-06-06 13:09 14539方案一:先通过父元素的子元素找到含自己在内的“兄弟元素”,然后 ... -
js判断浏览器
2013-10-31 15:33 954// 判断浏览器 function getExplorer() ... -
jQuery获取Select选择的Text和 Value
2013-09-24 17:49 1138jQuery获取Select选择的Tex ... -
jquery中修改input标签中type属性
2013-07-09 14:50 7990<style> .input_Login { w ... -
jqGrid 各种参数 详解
2013-06-06 14:54 111870JQGrid是一个在jquery基础上做的一个表格控件,以 ... -
jquery动态生成添加的html代码怎么获取id 或class
2012-12-24 10:55 1397动态创建的节点要用live方法加事件,语句要改为: $(“. ... -
GWT CellTable
2011-11-01 10:20 3365package com.cn.client; import ...
相关推荐
这个demo实现了简单地用户管理,权限管理,角色管理,底层使用ssh4的dao,service...利用过滤器实现session超时管理,权限管理需要自己补全。echache实现了二级缓存,打印sql可以看到部分配置后不会重复查询数据库。
假设过期时间为30分钟,校验发生在服务器,借助过滤器,可以这样写 public class PowerFilter : AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext filterContext) { var cookie ...
3.4.1 Session、Application和Cache 3.4.2 Request 3.4.3 Response 3.4.4 Server 3.4.5 User 3.4.6 Trace 3.4.7 访问其他类中的HTTP上下文 3.5 总结 第4章 服务器控件 4.1 服务器控件的类型 ...
7.4. 使用其他过滤器 —— 基于框架 8. 核心安全过滤器 8.1. FilterSecurityInterceptor 8.2. ExceptionTranslationFilter 8.2.1. AuthenticationEntryPoint 8.2.2. AccessDeniedHandler 8.3. ...
7.4. 使用其他过滤器 —— 基于框架 8. 核心安全过滤器 8.1. FilterSecurityInterceptor 8.2. ExceptionTranslationFilter 8.2.1. AuthenticationEntryPoint 8.2.2. AccessDeniedHandler 8.3. ...
7.4. 使用其他过滤器—— 基于框架 8. 核心安全过滤器 8.1. FilterSecurityInterceptor 8.2. ExceptionTranslationFilter 8.2.1. AuthenticationEntryPoint 8.2.2. AccessDeniedHandler 8.3. ...
3.4.1 Session、Application和Cache 84 3.4.2 Request 85 3.4.3 Response 86 3.4.4 Server 88 3.4.5 User 90 3.4.6 Trace 91 3.4.7 访问其他类中的HTTP上下文 96 3.5 总结 96 第4章 服务器控件 ...
7.session超时处理和httpsession监听器 8.bootstarp-Admin框架 9.记录登录者信息,存储在mongodb中.(使用到百度地图api中的IP精确定位) 已包含工具类: 1.ID生成器 2.日期处理 3.短信验证码发送(使用的是云片网络) ...
13.5与其他基于过滤器的框架一起使用 118 13.6高级命名空间配置 118 14.核心安全筛选器 119 14.1 FilterSecurityInterceptor 119 14.2 ExceptionTranslationFilter 121 14.2.1 AuthenticationEntryPoint 122 14.2.2 ...
通过 web.xml 文件,我们可以对 Web 应用进行配置,例如设置应用程序的名称、描述、过滤器、监听器、Servlet、会话超时等等。 以下是 web.xml 文件中的一些常用元素: 1. `<web-app>`:web.xml 文件的根元素,用于...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
4 管理员登录 管理留言 时,第一次输入错误时返回后,必再按一下“管理留言”来刷新页面,否则验证码不对,后台管理使用session记录在线状态,超时请重新登录 5 权限等级: 管理员 前后台所有操作,但不作为发贴者...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...
使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...