『壹』 校验用户是否登录过滤器Filter
CheckLoginFilter net.cnki.tpi.cms.util.CheckLoginFilter redirectURL /login.jsp notCheckURLList /error.jsp;/login.jsp CheckLoginFilter /* 2、然后新创建一个CheckLoginFilter.java类,代码如下:
/** * 校验用户是否已登录过滤器 * @author lpz * */ public class CheckLoginFilter implements Filter { private FilterConfig filterConfig = null; private String redirectURL = null; private List notCheckURLList = new ArrayList(); public CheckLoginFilter() { } public void destroy() { notCheckURLList.clear(); } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)servletRequest; HttpServletResponse response = (HttpServletResponse)servletResponse; HttpSession session = request.getSession(); Object userInfo = session.getAttribute("userInfo"); if(!(request) && userInfo==null){ //重定向到指定页面 response.sendRedirect(request.getContextPath() + redirectURL); }else{ //继续响应请求 chain.doFilter(servletRequest, servletResponse); } } public void init(FilterConfig fConfig) throws ServletException { this.filterConfig = fConfig; redirectURL = filterConfig.getInitParameter("redirectURL"); String notCheckURLListStr = filterConfig.getInitParameter("notCheckURLList"); if(!MyStringUtil.isNullOrEmpty(notCheckURLListStr)){ //将字符串转化为list notCheckURLList = MyStringUtil.convStrToList(notCheckURLListStr,";"); } } /** * 校验当前请求是否在不过滤的列表中 * @param request * @return */ private boolean (HttpServletRequest request) { String uri = request.getServletPath() + (request.getPathInfo() == null ?
『贰』 怎么用过滤器管理用户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>
『叁』 判断用户登录是用springmvc 拦截器还是filter
在struts2中用过filter过滤器,在springmvc中还有拦截器,它们都能过滤请求,但是到底有什么区别呢?
一、定义
拦截器 :是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。
过滤器:是在javaweb中,你传入的request、response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符.。
二、xml文件配置
1.filter
该过滤器的方法是创建一个类XXXFilter实现此接口,并在该类中的doFilter方法中声明过滤规则,然后在配置文件web.xml中声明他所过滤的路径
<filter>
<filter-name>XXXFilter</filter-name>
<filter-class>
com.web.util.XXXFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>XXXFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter>
<filter-name>XXXFilter</filter-name>
<filter-class>
com.web.util.XXXFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>XXXFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
2.Interceptor
它也要实现HandlerInterceptor 接口,这里只介绍方法注解配置
<!-- 拦截器 -->
<mvc:interceptors>
<!-- 多个拦截器,顺序执行 -->
<mvc:interceptor>
<mvc:mapping path="/entryOrJsonController/*" /><!-- 如果不配置或/*,将拦截所有的Controller -->
<bean class="com.wy.interceptor.CommonInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
<!-- 拦截器 -->
<mvc:interceptors>
<!-- 多个拦截器,顺序执行 -->
<mvc:interceptor>
<mvc:mapping path="/entryOrJsonController/*" /><!-- 如果不配置或/*,将拦截所有的Controller -->
<bean class="com.wy.interceptor.CommonInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
三、具体区别
filter
Interceptor
多个的执行顺序
根据filter mapping配置的先后顺序
按照配置的顺序,但是可以通过order控制顺序
规范
在Servlet规范中定义的,是Servlet容器支持的
Spring容器内的,是Spring框架支持的。
使用范围
只能用于Web程序中
既可以用于Web程序,也可以用于Application、Swing程序中。
深度
Filter在只在Servlet前后起作用
拦截器能够深入到方法前后、异常抛出前后等
四、总结
两者的本质区别:拦截器是基于java的反射机制的,而过滤器是基于函数回调。从灵活性上说拦截器功能更强大些,Filter能做的事情,他都能做,而且可以在请求前,请求后执行,比较灵活。Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验(比较泛的,比如登录不登录之类),太细的话,还是建议用interceptor。不过还是根据不同情况选择合适的。
『肆』 struts2配置自定义过滤器,检查用户是否登录,没登录就不许进入某些页面
struts2写拦截器吧?过滤器貌似servlet里边用.
public class LoginInterceptor extends AbstractInterceptor{
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
Map<String, Object> session=ActionContext.getContext().getSession();
User user=(User) session.get("user");
//如果确认订单时没有登录返回登录页专否则继续执属行
if (user==null) {
return "relogin";
}else{
invocation.invoke();
return "";
}
}
}
『伍』 用过滤器判断用户是否登录,并且可以进行操作
你在session中设置的是User对象,所以你通过session去取时,也只能取到User对象
User user = (User) Session.getAttribute("loginUser");
然后版判断user不为空权和user.getUsername不为空
『陆』 使用filter过滤用户是否登录
登录成功后 将用户名放在session里面 在过滤器里面进行验证session是否为空 为空跳转到登录页面
『柒』 如何用Filter实现对注册用户是否登录的过滤
下面是我从前写的项目里用的用户过滤。供你参考。你可以去www.mldn.cn上看看,那儿有过滤器的视频教程。
package filter;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.* ;
//对用户是否登录进行过滤
public class UserFilter implements Filter
{
//过滤器初始化
public void init(FilterConfig filterConfig) throws ServletException
{
}
//实现Filter接口主方法
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain) throws ServletException,IOException
{
response.setContentType("text/html ;charset=GBK");
request.setCharacterEncoding("GBK");
PrintWriter out=response.getWriter();
HttpServletRequest req=(HttpServletRequest)request;
HttpSession session=req.getSession();
//System.out.println(session.getAttribute("user"));
//user是用户登录后session.setAtrribute("user",×××)中的user
if(session.getAttribute("user")!=null){
chain.doFilter(request, response);
}
else{//未登录,后退
out.println("<script language='javascript'>alert('你还未登录');");
out.println("history.go(-1);</script>");
}
}
//过滤器销毁
public void destroy(){}
}
『捌』 asp.net 判断用户是否登录 过滤器
重写个pagebase基类,在里面判断登录,页面都继承该基类
代码如下:
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
/// <summary>
///PageBase 的摘要说明
/// </summary>
public class PageBase : System.Web.UI.Page
{
public PageBase()
{
this.Load += new EventHandler(PageBase_Load);
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
this.Load += new System.EventHandler(PageBase_Load);
}
private void PageBase_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
if (Session["userid"] == null)
{
Page.RegisterClientScriptBlock("kk", "<script>location.href='../user/login1.aspx';</script>");
}
}
}
}
『玖』 php如何验证过滤用户是否登录
一、可以通过Session,实现用户登录验证。
session习惯上被译为会话,它的设计是为了在一个访问期间在不同的页面间传输数据,以解决http协议无状态的问题。
session_register()函数的作用是注册新的变量,它会在全局变量中增加1个变量到目前的session之中,以后其他页面可以通过session_is_registered()函数检测该session变量是否已经注册。
二、通过session来检测用户登录信息,由两个文件组成,login.php为用户登录页面,checklogin.php用于检测账号、密码和是否登录成功。
具体参考代码如下:
login.php的代码如下:
<?php
session_start();//初始化session
if(isset($_SESSION['shili']))
{
header("Location:shili.php");//重新定向到其他页面
exit();
}
?>
<scriptlanguage="javascript">
functionchecklogin(){
if((login.username.value!="")&&(login.password.value!=""))
{
returntrue;//判断用户名和密码不为空,返回TRUE
}
else
{
alert("昵称或密码不能为空!")
}
}
</script>
<styletype="text/css">
.style1{font-size:13px;font-family:"黑体";font-weight:normal;color:#0099FF;}
</style>
<divalign="center">
<formname="login"method="post"action="checklogin.php"onSubmit="returnchecklogin()">
<tablewidth="260"border="1"bgcolor="#D8EFFA">
<tralign="center">
<tdheight="30"colspan="2"><spanclass="style1">管理系统登录</span></td>
</tr>
<tr>
<tdwidth="90"align="center"class="style1">管理员:</td>
<tdwidth="170"height="20"align="left"valign="middle"><inputname="username"type="text"id="username"size="20"></td>
</tr>
<tr>
<tdalign="center"class="style1">密码:</td>
<tdheight="20"align="left"valign="middle"><inputname="password"type="password"id="password"size="20"></td>
</tr>
<tr>
<tdalign="center"class="style1"></td>
<tdheight="20"align="center"><inputtype="submit"name="Submit"value="登录"></td>
</tr>
</table>
</form>
</div>
checklogin.php的代码如下:
<?php
session_start();//初始session
if(isset($_SESSION['shili']))
{
header("Location:shili.php");//重新定向到其他页面
exit;
}//登录过的话立即结束
$shili_name=$_POST['username'];//获取参数
$password=$_POST['password'];
//验证管理员名称和密码是否正确,这里采用直接验证,没有连接数据库
if($shili_name=="mr"and$password=="mrsoft")
{
session_register("shili");//注册新的变量,保存当前会话的昵称
$shili=$shili_name;
echo"<fontcolor=red>登录成功!</font>";
header("Location:shili.php");//登录成功重定向到管理页面
}
else
{
echo"<tablewidth='100%'align=center><tr><tdalign=center>";
echo"账号或密码错误,或者不是管理员账号<br>";
echo"<fontcolor=red>登录失败!</font><br><ahref='login.php'>请重新输入</a>";
echo"</td></tr></table>";
}
?>
shili.php的代码如下:(实验简单验证)
<?php
echo"WelcometoMyWorld!";
?>
//如果想要对某个页面限制浏览的用户,可以使用同样的方式,只要把如下的代码放在该页面的开头即可:
<?php
session_start();
if(!isset($_SESSION['shili'])){
echo"<palign=center>";
echo"<fontcolor=#ff0000size=5><strong><big>";
echo"你没有登录,请<ahref='denglu.php'>登录</a>!";
echo"</big></strong></font></p>";
exit();
}
?>
『拾』 jsp页面怎么使用过滤器判断用户是否登入
是把用户信息放到session里面的,那你的过滤器,就判断session值是否为空就好了,如果为空