利用过滤器来实现session超时,和权限管理
2014-06-29 23:01
423 查看
我们经常会碰到这样的情况,当我们有事情离开了一会,等再回来继续我们在网页中的操作时,会出现session超时的错误,然后跟上一堆的错误,让用户感觉很不爽,像这种情况如果能在一个错误页面给个Session超时的提示就会比较友好些,再一种情况,当一个系统中的用户角色有多个,有些页面对于一些级别低的用户来说是没有权限观看的,可能在页面上能根据不同的权限屏蔽了一些链接让低级别的用户无法进入,但是这只能让低级别的用户看不见高级操作的链接,假如用户知道链接的地址直接在地址栏中输入链接,岂不是也可以进入系统啊,要解决这两个问题就得在页面中做判断了。
If(session == null) {
//如果是超时则跳转到登陆页面重新登陆
}
If(checkAuthority() == false) {
//如果权限不足则跳转到错误页面给个提示
}
每个.jsp页面中加上以上的判断貌似能够解决问题,然而一个系统往往有成百上千的jsp页面,倘若每个页面都这样加岂不是很费事,而且如果将来的权限判断发生变化,将要维护所有的jsp这样的工作量是很大的,灵活性很差,要是在进入这些jsp之前必须统一经过一个地方,在这个地方来做判断貌似要好一下,我们使用了过滤器来解决了这个问题
新建一个过滤器命名为:FilterDemo,该类继承自:javax.servlet.Filter
然后将新建的Filter添加到web.xml中,部署Filter需要添加两部分:
1.filter元素
filter元素位于部署描述符文件(web.xml)的前部,所有filter-mapping、servlet或servlet-mapping元素之前。
2.filter-mapping元素
filter-mapping元素位于web.xml文件中filter元素之后serlvet元素之前
以上内容表示所以的请求中以.do结尾的都有首先通过我们这里指定的过滤器:
新建一个Servlet来测试:
在web.xml中部署好该servlet
新建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
If(session == null) {
//如果是超时则跳转到登陆页面重新登陆
}
If(checkAuthority() == false) {
//如果权限不足则跳转到错误页面给个提示
}
每个.jsp页面中加上以上的判断貌似能够解决问题,然而一个系统往往有成百上千的jsp页面,倘若每个页面都这样加岂不是很费事,而且如果将来的权限判断发生变化,将要维护所有的jsp这样的工作量是很大的,灵活性很差,要是在进入这些jsp之前必须统一经过一个地方,在这个地方来做判断貌似要好一下,我们使用了过滤器来解决了这个问题
新建一个过滤器命名为:FilterDemo,该类继承自:javax.servlet.Filter
public class FilterDemo implements Filter{ publicvoid destroy() {} publicvoid 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); } publicvoid 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来测试:
publicclass DownLoadDemo extends HttpServlet { privatestaticfinallongserialVersionUID = 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>
相关文章推荐
- 使用过滤器来处理Session超时和权限管理
- 使用过滤器来处理Session超时和权限管理
- 利用过滤器对hibernate的session管理,实现session在线程范围内的共享
- 使用过滤器来处理Session超时和权限管理
- 利用session 会话分析是否登陆,进行登陆权限管理
- java利用过滤器重写request将session存到couchbase中实现共享
- PHP巧妙利用位运算实现网站权限管理
- struts2中利用拦截器实现权限管理
- 利用ZTree链接数据库实现 [权限管理]
- 利用RBAC模型实现一个通用的权限管理系统
- MVC中如何利用filter实现权限管理
- 利用已有数据库结合ASP.NET2.0权限管理机制实现权限分配
- (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】
- 利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除)
- __利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除)
- 利用已有数据库结合ASP.NET2.0权限管理机制实现权限分配(2)
- PHP巧妙利用位运算实现网站权限管理
- 简单的sessionjava实现论坛权限管理