jsp 过滤器禁止输入URL直接访问,而jsp页面的验证验证登录能如常进行,下面图里的代码怎么改,求大神指导

jsp 过滤器禁止输入URL直接访问,而页面验证登录能如常进行,下面图里的代码怎么改,求大神指导-入网址访问JSP页面
jsp 过滤器禁止输入URL直接访问,而页面验证登录能如常进行,下面图里的代码怎么改,求大神指导-入网址访问JSP页面
jsp 过滤器禁止输入URL直接访问,而页面验证登录能如常进行,下面图里的代码怎么改,求大神指导50分
你在过滤器验证下session不行吗?session空就跳转到登录,否则正常访问。
朋友,现在我们要向你说说这个迫不及待、需要解决的问题——信耶稣得永生。“你若口里认耶稣为主,心里信神叫祂从死里复活,就必得救。——罗马书10:9”
我们曾经被人说是“迷信”、“唯心”,但我们不承认我们是迷信、唯心的。不信有神的人倒是迷信和唯心的呢!没有的、假的,我们硬说是有、是真,这就是迷信与唯心。明明是有神,但闭起眼睛说“没有”,这不是迷信与唯心又是什么呢?也许你会说:“你这个人太奇怪了,把没有看见的神,说成‘明明有’,还说别人迷信与唯心!”请注意,不信有神的人往往用“看不见”来欺哄自己。试想,看不见的东西有多少?最高的山,最深的海,最北的北极和最南的南极,地球的核心以及千千万万的事物,我们都没有见过,为什么我们信它们是存在的呢?没有看见过的东西,我们怀疑它的存在,这倒不太奇怪,最奇怪的是我们去否定它!
如果你再没有机会遇见信耶稣的人,或者没有机会到福音堂,就请你回忆以上所说的这几节经文,决心相信。你什么时候相信,什么时候就得救;你什么时候离开世界,什么时候就到天家。这是一个最简单的方法,这是一个最大的福气。你不用一分钱来赎你的罪,只要你用信心,接受已经作成的救赎工作;你不用靠立功行善来获得永生,在你真心相信后,才谈得上善行。在你真心接受救恩后,每天祈祷,生命会有大改变,心里充满了喜乐平安,因为你有了新生命,而且你的生命是有保障的——永不灭亡!这是恩典,请你现在就立即接受耶稣作你个人的救主!如果你现在不信,以后遇到了什么危险的时候,请你回忆我对你所说过的话,立即祈祷神,接受耶稣,还是可以的。但请你不要等到危难的时候才信,恐怕你的生命不留情,至使你来不及信,那你就后悔莫及,结果永远受苦!请你保留这本小册子,经常翻阅,直到你接受救恩。再见!
你可能感兴趣的内容?& & 今天用ssh2写了个简单的系统,发现了一个问题,我这系统必须先登录成功才能进入主页,但我在浏览器里直接输入主页地址,发现也能进入,这个肯定不好,毫无安全性可言,后经查资料发现需要登录过滤器,就试了下,发现果然可以避免未经登录即可进入主页的危险,下面是我整理出的详细步骤:
1.首先写一个权限过滤filter类,实现Filter接口
1 import java.io.IOE
3 import javax.servlet.F
4 import javax.servlet.FilterC
5 import javax.servlet.FilterC
6 import javax.servlet.ServletE
7 import javax.servlet.ServletR
8 import javax.servlet.ServletR
9 import javax.servlet.http.HttpServletR
10 import javax.servlet.http.HttpServletR
11 import javax.servlet.http.HttpS
13 public class LoginFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 获得在下面代码中要用的request,response,session对象
HttpServletRequest servletRequest = (HttpServletRequest)
HttpServletResponse servletResponse = (HttpServletResponse)
HttpSession session = servletRequest.getSession();
// 获得用户请求的URI
String path = servletRequest.getRequestURI();
//System.out.println(path);
// 从session里取员工工号信息
String empId = (String) session.getAttribute("empId");
/*创建类Constants.java,里面写的是无需过滤的页面
for (int i = 0; i & Constants.NoFilter_Pages. i++) {
if (path.indexOf(Constants.NoFilter_Pages[i]) & -1) {
chain.doFilter(servletRequest, servletResponse);
// 登陆页面无需过滤
if(path.indexOf("/login.jsp") & -1) {
chain.doFilter(servletRequest, servletResponse);
// 判断如果没有取到员工信息,就跳转到登陆页面
if (empId == null || "".equals(empId)) {
// 跳转到登陆页面
servletResponse.sendRedirect("/JingXing_OA/login.jsp");
// 已经登陆,继续此次请求
chain.doFilter(request, response);
public void destroy() {
// TODO Auto-generated method stub
2.然后在web.xml里配置需要登陆权限验证的JSP文件:&&&& a.如果是某个具体的JSP文件(如a.jsp)需要登陆验证
1 &!-- 配置登陆过滤器 --&
2 &filter&
&filter-name&login&/filter-name&
&filter-class&com.jingxing.oa.filter.LoginFilter&/filter-class&
&filter-mapping&
&filter-name&login&/filter-name&
&url-pattern&/*&/url-pattern&
10 &/filter-mapping&
b.如果是某一个目录(如a/目录)整个目录下的文件都需要登陆验证:
1 &!-- 配置登陆过滤器 --&
&filter-name&login&/filter-name&
&filter-class&com.jingxing.oa.filter.LoginFilter&/filter-class&
&filter-mapping&
&filter-name&login&/filter-name&
&url-pattern&/a/*&/url-pattern&
&/filter-mapping&
阅读(...) 评论()2014年7月 Java大版内专家分月排行榜第二
2015年1月 Java大版内专家分月排行榜第三2014年8月 Java大版内专家分月排行榜第三
2016年1月 Java大版内专家分月排行榜第二2015年12月 Java大版内专家分月排行榜第二2015年8月 Java大版内专家分月排行榜第二2015年3月 Java大版内专家分月排行榜第二2015年1月 Java大版内专家分月排行榜第二2014年12月 Java大版内专家分月排行榜第二2014年11月 Java大版内专家分月排行榜第二2014年6月 Java大版内专家分月排行榜第二2014年4月 Java大版内专家分月排行榜第二2014年1月 Java大版内专家分月排行榜第二2013年11月 Java大版内专家分月排行榜第二
2015年9月 Java大版内专家分月排行榜第三2015年6月 Java大版内专家分月排行榜第三2015年5月 Java大版内专家分月排行榜第三2015年2月 Java大版内专家分月排行榜第三2014年3月 Java大版内专家分月排行榜第三2013年12月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。用户的访问权限过滤器,防止用户直接输入URL直接访问资源。 - VIANOZ - ITeye博客
博客分类:
刚写完用户的访问权限过滤器,基本实现了防止用户直接输入URL访问资源。如有不足请指正!
Java 代码:
package com.viano.
import java.io.IOE
import javax.servlet.F
import javax.servlet.FilterC
import javax.servlet.FilterC
import javax.servlet.ServletE
import javax.servlet.ServletR
import javax.servlet.ServletR
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpS
* 用户访问权限的过滤器
* @author viano
public class UsersFilter implements Filter {
public void destroy() {
// TODO Auto-generated method stub
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 设置请求的字符编码
request.setCharacterEncoding("UTF-8");
// 设置返回请求的字符编码
response.setCharacterEncoding("UTF-8");
// 转换ServletRequest为 HttpServletRequest
HttpServletRequest req = (HttpServletRequest)
// 转换ServletResponse为HttpServletRequest
HttpServletResponse res = (HttpServletResponse)
// 获取Session
HttpSession session = req.getSession();
// 获取Session中存储的对象
Object o = session.getAttribute("user");
// 获取当前请求的URI
String url = req.getRequestURI();
// 判断Session中的对象是否为空;判断请求的URI是否为不允许过滤的URI
if (o == null
&& !url.endsWith("login.jsp")
// 对URL地址为此结尾的文件不过滤
&& url.indexOf("login.do") & 0
// 对URL地址中包含此字符串的文件不过滤
&& url.indexOf("/images/") & 0) {
res.sendRedirect(req.getContextPath() + "/login.jsp");
chain.doFilter(request, response);
res.setHeader("Cache-Control","no-store");
res.setDateHeader("Expires",0);
res.setHeader("Pragma","no-cache");
res.flushBuffer();
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
WEB.XML 代码:
&!-- Filter 登陆过滤开始--&
&filter-name&UsersFilter&/filter-name&
&filter-class&com.viano.filter.UsersFilter&/filter-class&
&filter-mapping&
&filter-name&UsersFilter&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
&!-- Filter 登陆过滤结束--&
浏览 10413
浏览: 91452 次
来自: 西安
[img]&pre name=&code&qu ...
不是linux系统吗,怎么试CentOSstruts下通过过滤器进行权限控制
1.struts框架安全隐患
使用Struts框架时,权限通常控制在Action级(比如将权限验证放在Action的基类中,这样新的Action都继承于这个Action基类,所有Action就可以专注于业务逻辑,而不需要重复地进行权限控制了),这也符合MVC中的角色划分。然而,这会产生一个安全隐患。因为权限控制在Action中,所以,页面也就没有安全屏障了。一般的新增数据、更新数据不会有什么问题,因为这些数据必须通过HTML的Form提交到Struts的中心控制器,最终由相应的Action来处理,所以Action中就可以验证该用户的权限了。然而,对于一些不需要Action进行数据存取,或者有的页面没有严格按照MVC的角色划分而在页面中有获取数据的代码,那么这个页面就危险了。比如,显示一张通知页面,通常可以通过配置权限,使部分授权的用户才可以看到该级别的通知。这个通知页面是不需要从数据库中获取数据的。所以,可以不通过Action的调用来显示,而是直接敲入显示该通知的页面的链接就可以看到了。甚至不需要登录系统,不用管是否有查看该通知的权限!
比如下图中:
http://.../XXX.do
是通过正常的途径访问的,需要经过权限验证。
http://.../XXX.jsp
则完全绕过了权限检查,任何人,不需要登录系统就可以访问到该信息了。
2.解决方案
解决的办法: 采用servlet过滤器
servlet过滤器是小型的web组件,它能够处理传入的请求和传出的响应。Filter
不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开servlet时处理response。它具有高度的透明性,无需更改应用程序代码,就可以根据需要添加、修改或从应用程序中将它删除。
一个filter 包括:
1. 在servlet被调用之前截获;
2. 在servlet被调用之前检查
3. 根据需要修改request头和request数据;
4. 根据需要修改response头和response数据;
5. 在servlet被调用之后截获.
你能够配置一个filter 到一个或多个servlet;单个servlet或servlet组能够被多个filter
使用。几个实用的filter包括:用户辨认filter,日志filter,审核filter,加密filter,符号filter,能改变xml内容的XSLT
filter等。
一个客户化的过滤器要实现Filter接口的三个方法:init()、destroy()和doFilter()。
init():在容器实例化过滤器时调用,该方法接受一个FilterConfig类型的对象做为输入。
destroy():执行一些清理操作。
doFilter():类似servlet的doPost()、doGet()方法,执行具体的过滤任务。
设置URL拦截器,对截获的请求url(两部分包括XXX.do和XXX.Jsp)做权限验证,具有该权限则继续下一步,否则跳转到相应页面显示用户没有权限。
3.具体步骤
统过滤器配置具体步骤:
首先写一个权限过滤filter类,实现Filter接口
jsp权限过滤器permissionFilter
import javax.servlet.F
import javax.servlet.FilterC
import javax.servlet.ServletE
import javax.servlet.ServletR
import javax.servlet.ServletR
import javax.servlet.FilterC
import java.io.IOE
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import po.
public class permissionFilter implements Filter {
1,doFilter方法的第一个参数为ServletRequest对象。
此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。
第二个参数为ServletResponse,通常在简单的过滤器中忽略此参数。
最后一个参数为FilterChain,此参数用来调用servlet或JSP页。
&&& private
FilterConfig filterC
&&& private
&&& private
HttpServletR
&&& private
HttpServletR
&&& public void
destroy() {
this.filterConfig =
&&& public void
init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterC
&&& public void
doFilter(ServletRequest servletRequest,
&&&&&&&&&&
ServletResponse servletResponse, FilterChain chain) {
this.chain =
this.request = (HttpServletRequest) servletR
如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中无法得到的方法,
// 就要把此request对象构造成HttpServletRequest
this.response = ((HttpServletResponse) servletResponse);
// 获取当前页面文件名此处url为:/Gzlkh/login.jsp
String url = request.getRequestURI();
// 此处截取的url为:login.jsp
url = url.substring(url.lastIndexOf("/") + 1, url.length());
&&&&&&&&&&
HttpSession session = request.getSession();
&&&&&&&&&&
// 获取网站访问根目录
&&&&&&&&&&
String accessPath = request.getContextPath();
&&&&&&&&&&
// 获取用户登录验证信息
&&&&&&&&&&
login st = (login) session.getAttribute("st");
&&&&&&&&&&
if (noFileUrl(url, request)) {
// 不需要判断权限的请求如登录页面,则跳过
&&&&&&&&&&&&&
chain.doFilter(request, response);// 继续执行请求
&&&&&&&&&&
} else if (st == null) {
&&&&&&&&&&&&&
response.sendRedirect(accessPath + "/login.jsp");
// 未登录或超时,返回登陆页面
&&&&&&&&&&
&&&&&&&&&&&&&
verifyUrl(url, st);// 判断当前user是否拥有访问此url的权限
&&&&&&&&&&
} catch (Exception sx) {
&&&&&&&&&&
sx.printStackTrace();
&&& private void
verifyUrl(String url, login st) throws IOException,
&&&&&&&&&&
ServletException {
// 获取user拥有的所有资源串,此处全部提取出来,以方便以后项目扩展
//更好的方式是把此处的权限页面存储在数据库中,与角色建立关系,以后可以直接根据用户角色从
//数据库中取出
String sturl =
// 拥有权限页1的jsp页面
String url1="";
// // 拥有权限页2的jsp页面
String url2 = ""
拥有权限页3的jsp页面&&&&&
String url3 = "";
拥有权限页4的jsp页面&&&&&
String url4 = "";
拥有权限页5的jsp页面&&&&&&
String url5 = "";
// 拥有权限页6的jsp页面
String url6 = "";
String url7 = "";
sturl = url7;
//以下判断用户是否有进入该页面的权限,有则加入
if ("1".equals(st.getKhbfqx())) {
&&&&&&&&&&
sturl = sturl + "," + url1;
if ("1".equals(st.getRcgzqx())) {
&&&&&&&&&&
sturl = sturl + "," + url2;
if ("1".equals(st.getKhzbqx())) {
&&&&&&&&&&
sturl = sturl + "," + url3;
if ("1".equals(st.getKhjgqx())) {
&&&&&&&&&&
sturl = sturl + "," + url4;
if ("1".equals(st.getXtpzqx())) {
&&&&&&&&&&
sturl = sturl + "," + url6;
if ("1".equals(st.getYhglqx())) {
&&&&&&&&&&
sturl = sturl + "," + url5;
if (sturl.indexOf(url) &= 0) {
&&&&&&&&&&
//判断用户权限页面包含请求url里面的页面
&&&&&&&&&&
chain.doFilter(request, response);
&&&&&&&&&&
//用户无权限跳转提示
&&&&&&&&&&
response.setContentType("text/charset=GBK");
&&&&&&&&&&
response.getWriter().println("&div style='margin:
100text-align: "
&&&&&&&&&&
+ "font: bold 18px 宋体;color: #0066CC;vertical-align:
Sorry,您没有权限访问该资源!&/div&");
&&& protected
boolean noFileUrl(String url, HttpServletRequest request) {
//不需要权限验证的页面动作等
String exclude = "xx.jsp";
//判断请求页面是否是特殊页面
if (exclude.indexOf(url) &= 0) {
&&&&&&&&&&
Action权限过滤器permissiondoFilter
import javax.servlet.F
import javax.servlet.FilterC
import javax.servlet.ServletE
import javax.servlet.ServletR
import javax.servlet.ServletR
import javax.servlet.FilterC
import java.io.IOE
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import po.
public class permissiondoFilter implements Filter {
//1,doFilter方法的第一个参数为ServletRequest对象。
//此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。
//第二个参数为ServletResponse,通常在简单的过滤器中忽略此参数。
//最后一个参数为FilterChain,此参数用来调用servlet或JSP页。
&&& private
FilterConfig filterC
&&& private
&&& private
HttpServletR
&&& private
HttpServletR
&&& public void
destroy() {
this.filterConfig =
&&& public void
init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterC
&&& public void
doFilter(ServletRequest servletRequest, ServletResponse
servletResponse,
&&&&&&&&&&
FilterChain chain) {
this.chain =
this.request = (HttpServletRequest) servletR
//如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中无法得到的方法,就要把此request对象构造成HttpServletRequest
this.response = ((HttpServletResponse) servletResponse);
// 获取当前页面文件名此处url为:/Gzlkh/login.jsp
String url = request.getRequestURI();
// 此处截取的url为:login.jsp
url = url.substring(url.lastIndexOf("/") + 1, url.length());
&&&&&&&&&&
// 排除后台不作权限控制的页面名
&&&&&&&&&&
// 登陆页面无需验证文件
&&&&&&&&&&&
HttpSession session = request.getSession();
&&&&&&&&&&&
// 获取网站访问根目录
&&&&&&&&&&
String accessPath = request.getContextPath();
&&&&&&&&&&&
login st = (login)
session.getAttribute("st");&&&&&&&&&
&&&&&&&&&&&
if (noFileUrl(url, request)) { // 不需要判断权限的请求如登录页面,则跳过
&&&&&&&&&&&&&&&
chain.doFilter(request, response);
&&&&&&&&&&&
} else if (st == null) {
&&&&&&&&&&&
response.sendRedirect(accessPath + "/login.jsp");//
返回登陆页面(未登录或超时)
&&&&&&&&&&&
&&&&&&&&&&&&&
System.out.println(st.getRolename()+st.getUsername()+"-访问-"+url);
&&&&&&&&&&&&&&&
verifyUrl(url, st);// 判断当前user是否拥有访问此url的权限
&&&&&&&&&&&
}&&&&&&&&&&&&&&&&&&&&
} catch (Exception sx) {
&&&&&&&&&&
sx.printStackTrace();
&&& private void
verifyUrl(String url, login st)throws IOException, ServletException
// 获取user拥有的所有资源串
&&& String
&&& String
&&& String
考核结果页面
&&& String
用户管理页面
&&& String
权重配置页面
&&& String
个人密码修改公共
&&& String
url6="";&&&&&
sturl=url6;
if("1".equals(st.getRcgzqx())){
sturl=sturl+","+url1;
if("1".equals(st.getKhzbqx())){
sturl=sturl+","+url2;
if("1".equals(st.getKhjgqx())){
sturl=sturl+","+url3;
if("1".equals(st.getXtpzqx())){
sturl=sturl+","+url4;
if("1".equals(st.getYhglqx())){
sturl=sturl+","+url5;
if(sturl.indexOf(url)&=0){&&
System.out.println("有权访问!");
chain.doFilter(request, response);
&&&&&&&&&&&
&&&&&&&&&&&&&&&
System.out.println("无权限!");
&&&&&&&&&&&&
response.setContentType("text/charset=GBK");
&&&&&&&&&&&&&&&&
response.getWriter().println("&div style='margin:
100text-align:background-image:url(images/bg.jpg);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
+ "font: bold 18px 宋体;color: #0066CC;vertical-align:
Sorry,您没有权限访问该资源!&/div&");&&&&&&
&&&&&&&&&&&
&&& protected
boolean noFileUrl(String url, HttpServletRequest request) {
&&& String
exclude = "login.do";
if (exclude.indexOf(url)&=0) {
&&&&&&&&&&&
2.配置 Servlet过滤器
容器通过 Web 应用程序中的配置描述符 web.xml
文件了解过滤器。有两个新的标记与过滤器相关:&filter& 和
&filter-mapping&。应该指定它们为 web.xml 文件内
标记的子标记。&
过滤器定义的元素&
&filter& 标记是一个过滤器定义,它必定有一个
&filter- name& 和
&filter-class& 子元素。
&filter-name&
子元素给出了一个与过滤器实例相关的、基于文本的名字。
&filter-class& 指定了由容器载入的实际类。您能随意地包含一个
&init-param& 子元素为过滤器实例提供初始化参数。
&!--权限jsp过滤器--&
&filter-name&permission
&/filter-name&
&filter-class&dao.permissionFilter&/filter-class&
&filter-mapping&
&filter-name&permission
&/filter-name&
&!-- 只过滤 .jsp 结尾的url, 其余的如 .do, .html, .jpg, .css
等不作过滤--&
&url-pattern&*.jsp&/url-pattern&
&/filter-mapping&
&!--权限do过滤器--&
&filter-name&permissiondo
&/filter-name&
&filter-class&dao.permissiondoFilter&/filter-class&
&filter-mapping&
&filter-name&permissiondo
&/filter-name&
&!-- 只过滤 .do 结尾的url, 其余的如 .jsp, .html, .jpg, .css
等不作过滤--&
&url-pattern&*.do&/url-pattern&
&/filter-mapping&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 jsp页面验证 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信