Filter拦截器判断用户是否登陆 (2012-01-06 10:55:13)

最近项目中要实现一个未登录的用户不可以越过登陆页直接访问其他页面,如果没有登录就直接访问会跳转到登录页面,在这里我网上找了很多,有的说要用struts2的拦截器,我就试了下没成功,也没找到失败的原因。于是我翻了书看了看Filter过滤器也可实现,于是就照样子做了一个使用Filter来判断的例子结果成功了。
  1.首先是登录页面loin.jsp
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="login.action" method="post">
  User:<input type="text" name="name"/>
  Pwd:<input type="password" name="password"/>
  <input type="submit" value="Login"/>
</form>
</body>
</html>
2.成功登录后的页面success.jsp
 <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
SUCCESS
<s:if test="#session.AccountLogin!=null">
   登录名:<s:property value="#session.AccountLogin.name"/>
   密     码:<s:property value="#session.AccountLogin.password"/>
        <a href="queryall.action">查看所有账号列表</a>
</s:if>
<s:else></s:else>
</body>
</html>
3.账号列表页面accountlist.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<center><font color="red">账号列表</font></center>
<center>
<s:if test="#session.AccountLogin!=null">
<s:iterator value="#session.acclist" id="account">
   登录名:<s:property value="#account.name"/>
   密     码:<s:property value="#account.password"/>
</s:iterator>
</s:if>
</center>
</body>
</html>
4.动作类LoginAction.java
package ssh.com.action;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.SessionAware;

import ssh.com.po.Account;
import ssh.com.services.AccountService;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class LoginAction extends ActionSupport implements SessionAware,ModelDriven {
  
private static final long serialVersionUID = 1L;

    private Map<String, Object> session;
private AccountService accservice;
private Account account;
public void setAccservice(AccountService accservice)
{
this.accservice = accservice;
}

public void setAccount(Account account) {
this.account = account;
}

@Override
public Object getModel() {
// TODO Auto-generated method stub
account = new Account();
return account;
public Map<String, Object> getSession() {
return session;
}
@Override
public void setSession(Map<String, Object> session) {
// TODO Auto-generated method stub
this.session = session;
}
   //登陆
public String Login() throws Exception {
// TODO Auto-generated method stub
System.out.println("用户名:"+account.getName()+"  密码:"+account.getPassword());
Account acc = accservice.queryByLogin(account.getName(), account.getPassword());
System.out.println("用户名1:"+account.getName()+"  密码1:"+account.getPassword());
//通过request获得session实例
                HttpServletRequest    request = ServletActionContext.getRequest ();  
HttpSession session1 = request.getSession();
if(acc!=null)
{
 System.out.println("开始登陆");
 session.put("AccountLogin", acc);
                    
 session1.setAttribute("username", "success");
 System.out.println("ssss");
 return SUCCESS;
}
else
{
System.out.println("登陆失败");
System.out.println("ddddd");
return ERROR;
}
   }
   //查询所有账号
public String queryAll()throws Exception 
{
List list = accservice.queryAll();
if(list!=null)
{
session.put("acclist", list);
return SUCCESS;
}
return ERROR;
}
}
5.重点Filter过滤器sessionFilter.java
package ssh.com.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;



public class sessionFilter  implements Filter {

@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("过滤器销毁...");
}

@Override
public void doFilter(ServletRequest req, ServletResponse resq,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("开始过滤...");
HttpServletRequest request = (HttpServletRequest) req;
//获得session对象
HttpSession session = request.getSession();
String login = (String) session.getAttribute("username");
//判断如果是登陆页面,不用进行过滤检查
if("/ssh/WebContent/login.jsp".equals(request.getRequestURI()))
{
System.out.println("经过login.jsp页面");
chain.doFilter(req, resq);
}
else
{
if(login == null || "".equals(login))
{
System.out.println("未经过login.jsp页面");
request.getRequestDispatcher("login.jsp").forward(req, resq);
}else
{
chain.doFilter(req, resq);
}
}
}

@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
System.out.println("过滤器初始化...");
}

}
6.还要在web.xml加入过滤器的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">

    
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
    <listener>
       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
 
    <filter>  
        <filter-name>sessionFilter</filter-name>  
        <filter-class>ssh.com.filter.sessionFilter</filter-class>   
    </filter>  
    <filter-mapping>  
        <filter-name>sessionFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  

  <welcome-file-list>
<welcome-file>/login.jsp</welcome-file>
</welcome-file-list>
</web-app>
就这样一个登录验证完成了,如果没用经过login.jsp页面登陆直接访问别的页面就会跳转到login.jsp登录页登录。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值