A. session过滤器在web.xml怎么配置详情
可以把<url-pattern>的值改为"*",默认全都过滤,然后在过滤器里面写一个正则表达式:
String str = "[\\w]{1,}\\.jsp$";来判断是否是jsp页面,如果是就不执行doFilter()方法,这样过滤才算灵活,获取请求的文件名不用我说了吧?相信你会的
B. 怎么用过滤器管理用户session
我们经常会碰到这样的情况,当我们有事情离开了一会,等再回来继续我们在网页中的操作时,会出现session超时的错误,然后跟上一堆的错误,让用户感觉很不爽,像这种情况如果能在一个错误页面给个Session超时的提示就会比较友好些,再一种情况,当一个系统中的用户角色有多个,有些页面对于一些级别低的用户来说是没有权限观看的,可能在页面上能根据不同的权限屏蔽了一些链接让低级别的用户无法进入,但是这只能让低级别的用户看不见高级操作的链接,假如用户知道链接的地址直接在地址栏中输入链接,岂不是也可以进入系统啊,要解决这两个问题就得在页面中做判断了。
If(session== null) {
//如果是超时则跳转到登陆页面重新登陆
}
If(checkAuthority() == false) {
//如果权限不足则跳转到错误页面给个提示
}
每个.jsp页面中加上以上的判断貌似能够解决问题,然而一个系统往往有成百上千的jsp页面,倘若每个页面都这样加岂不是很费事,而且如果将来的权限判断发生变化,将要维护所有的jsp这样的工作量是很大的,灵活性很差,要是在进入这些jsp之前必须统一经过一个地方,在这个地方来做判断貌似要好一下,我们使用了过滤器来解决了这个问题
新建一个过滤器命名为:FilterDemo,该类继承自:javax.servlet.Filter
{
publicvoiddestroy() {}
publicvoiddoFilter(ServletRequest sreq, ServletResponse response,
FilterChain filterChain)
throwsIOException, ServletException {
HttpServletRequest request=(HttpServletRequest)sreq;
HttpSessionsession= request.getSession(false);
if(session==null) {
//如果是session超时,在此处做处理
}
if(request.getRequestURI().endsWith("download.do")) {
//此处可以针对不同的请求根据用户是否具有权限来做处理
}
request.getRequestDispatcher("/Error.jsp").
forward(request,response);
}
publicvoidinit(FilterConfig filterConfig)
throwsServletException {}
}
然后将新建的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来测试:
{
=1L;
publicDownLoadDemo() {
super();
}
protectedvoiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {
this.doPost(request, response);
}
protectedvoiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, 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>
<formaction="download.do">
<h1>This is a Demo Application</h1>
<ahref='DownLoadExcel.jsp'>导出Excel</a>
<inputtype='submit'>
</form>
</body>
为了便于对比我们使用了一个是超链接的形式,一个是通过servlet来跳转,当点击提交按钮时会被拦截,而直接点击超链接就不会被拦截,因为我们的Filter中配置的是拦截.do形式的,如果要拦截jsp也可以使用<url-pattern>DownLoadExcel.jsp </url-pattern>
再添加一个错误页面Error.jsp
<body>
<h1>对不起,你没有权限</h1>
</body>
C. filter过滤器初始化方法怎么引用session作用域对象
一、servlet:
1、servlet属于j2ee的组件,构建servlet的web project不需要导入项目框架jar包
2、servlet的体系结构:
在j2ee API中,提供给servlet的支持接口和基类都位于javax.servlet.*和javax.servlet.http.*(提供所有与http请求有关的API)两个包中
servlet包中常使用的接口
Interface ServletConfig
Interface ServletContext
Interface ServletRequest
Interface ServletResponse
Interface Servlet:此接口中提供的方法有init,getServletConfig,getServletInfo,destroy,service
jqavax.servlet.Genericservlet(实现了servlet接口,实现了基本servlet功能,提供有service()方法)
javax.servlet.http.HttpServlet(继承了Genericservlet类,可以处理http请求,提供的doGet()+doPost()和service()方法作用相同
3、实现servlet控制器的功能类需要继承HttpServlet类,并重写HttpServlet类中的方法
D. java爬虫要配置session过滤器吗
我们经常会碰到这样的情况,当我们有事情离开了一会,等再回来继续我们在网页中的操作时,会出现session超时的错误,然后跟上一堆的错误,让用户感觉很不爽,像这种情况如果能在一个错误页面给个Session超时的提示就会比较友好些
E. 如何实现检查session权限的过滤器
formaction="#"method=post>
用户名:<inputtype=textname=user><br>
密码:<inputtype=passwordname=pwd><br>
<inputtype=submitname=sbumitvalue=提交>
<inputtype=resetname=resetvalue=重置>
<?
session_start();
$_SESSION["user"]=$_POST[user];
$_SESSION["password"]=$_POST[pwd];
if($_SESSION[user]==""){
echo"<mce:scripttype="text/javascript"><!--
alert('用户名不能为空!');
//--></mce:script>";
}
if($_SESSION["user"]=="admin"){
echo"当前登内录:系统管理容员<br><ahref='users_manage.php'>用户管理</a>";
}else{
echo"当前登录:".$_SESSION[user]."<br><ahref='album.php'>我的相册</a>";
}
?>
F. java 过滤器 怎么获取session
filter里面的doFilter方法里面不是有 request参数吗 用这个对象就可以获取session
G. 过滤器的配置
工业过滤器是输送介质管道上不可缺少的一种装置,通常安装在减压阀、泄压阀、定水专位阀 ,方工过属滤器其它设备的进口端设备。其主要是由由筒体、不锈钢滤网、排污部分、传动装置及电气控制部分组成。
在这里为大家推荐一款过滤中常见的过滤器-多袋快开过滤器,是适用于高流量及频繁更换滤袋的一种快捷、高效过滤设备。这种过滤器主要作用于电子、半导体、化工、制药、食品饮料、造纸等各种工业领域。
H. JAVA可以用过滤器向SESSION传值吗
不知道你问的是技术还是规范:
1、技术
过滤器的参数中,有一个是request,通过request.getSession(true)可以获取到关联的session对象(request的类型需要强转),然后通过session.setAttribute设置参数即可。
2、规范
通常来说,上面的情况没有明显的业务场景,一般有的场景是:过滤器检测到一些特殊的情况的时候,直接通过request.setAttribute来将一些配置set到request对象上,这样在servlet/Action/Controller就可以获取到这些参数进行业务处理了。
I. jsp+servlet中session失效后跳转到登录页面 ,用过滤器filter来写,希望能有具体步骤和注释
public class SsFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
HttpSession session = req.getSession();
if (session.getAttribute("user") == null) {
resp.sendRedirect("/index.jsp");
return;
}
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
J. 共享session,以及过滤器和拦截器的区别
1、首先要明确什么是拦截器、什么是过滤器
1.1 什么是拦截器:
拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。
在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。
谈到拦截器,还有一个词大家应该知道——拦截器链(Interceptor Chain,在Struts 2中称为拦截器栈 Interceptor Stack)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。