您的位置:首页 > 其它

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

2012-08-24 14:27 513 查看
最近项目中要实现一个未登录的用户不可以越过登陆页直接访问其他页面,如果没有登录就直接访问会跳转到登录页面,在这里我网上找了很多,有的说要用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登录页登录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: