您的位置:首页 > 编程语言 > Java开发

SSH框架之Struts的拦截器案例——登陆

2017-01-05 15:29 435 查看
Struts的拦截器案例:登陆

1、需求:登陆后,显示列表!未登录,返回登陆界面, 不能显示列表!

2、案例准备:所需jar包。



3、功能实现(在此仅列出核心功能代码,完整代码已上传资源):

1)AdminDao.java

package sram.dao;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import sram.entity.Admin;
import sram.utils.JdbcUtils;

public class AdminDao {

public Admin login(Admin admin){
String sql = "select * from admin where userName=? and pwd=?";
try {
return JdbcUtils.getQuerrRunner()
.query(
sql,
new BeanHandler<Admin>(Admin.class),
admin.getUserName(),
admin.getPwd()
);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}

public List<Admin> getAll(){
String sql = "select * from admin";
try {
return JdbcUtils.getQuerrRunner()
.query(
sql,
new BeanListHandler<Admin>(Admin.class)
);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}


2)AdminAction.java

package sram.action;

import java.util.List;

import sram.entity.Admin;
import sram.service.AdminService;

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

public class AdminAction extends ActionSupport{

//1.封装请求数据
private Admin admin;

public Admin getAdmin() {
return admin;
}
public void setAdmin(Admin admin) {
this.admin = admin;
}
//2.调用service
private AdminService adminService = new AdminService();

//登陆
public String login(){
try {
Admin adminInfo = adminService.login(admin);
//判断
if(adminInfo==null){
//登陆失败
return "input";
}
//登陆成功,数据保存在session中
ActionContext.getContext().getSession().put("adminInfo", adminInfo);
//登陆成功
return "loginSuccess";
} catch (Exception e) {
return ERROR;
}
}

//列表
public String list(){
try {
//查询全部
List<Admin> list = adminService.getAll();
//保存到request
ActionContext.getContext().getContextMap().put("listAdmin", list);
return "list";
} catch (Exception e) {
return ERROR;
}
}
}


3)自定义拦截器:AdminCheckInterceptor.java

package sram.interceptor;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionProxy;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class AdminCheckInterceptor extends AbstractInterceptor{

/**
* 拦截器业务处理方法
*/
public String intercept(ActionInvocation invocation) throws Exception {
//拿到当前执行的方法名:判断,只要当前方法名不是login,就进行验证

//获取ActionContext对象
ActionContext ac = invocation.getInvocationContext();

//获取Action的代理对象
ActionProxy proxy = invocation.getProxy();
//获取当前执行的方法名
String methodName = proxy.getMethod();
//判断
if(!"login".equals(methodName)){
//先获取当前登陆的用户
Object obj = ac.getSession().get("adminInfo");
if(obj == null){
//没有登陆
return "input";
}else{
//当前用户已经登陆
return invocation.invoke();
}
}else{
//当前用户正在登陆
return invocation.invoke();
}
}
}


4)struts.xml(其中介绍了,如何配置全局拦截器与局部拦截器)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="admin" extends="struts-default">

<!-- 拦截器配置,注意书写的位置 -->
<interceptors>
<interceptor name="loginCheck" class="sram.interceptor.AdminCheckInterceptor"></interceptor>
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="loginCheck"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 【执行拦截器:第一种写法:当前包下的所有action都执行myStack栈】 -->
<default-interceptor-ref name="myStack"></default-interceptor-ref>

<!-- 全局配置 -->
<global-results>
<result name="error">/error.jsp</result>
</global-results>

<action name="admin_*" class="sram.action.AdminAction" method="{1}">

<!-- 第二种写法:只在这一个Action中执行拦截器栈
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="loginCheck"></interceptor-ref>-->

<!-- 第三种写法:执行用户栈(与第二种写法一样,只在当前action中执行自定栈) -->
<interceptor-ref name="myStack"></interceptor-ref>

<!-- 1.登陆失败 -->
<result name="input">/login.jsp</result>
<!-- 2.登陆成功 -->
<result name="loginSuccess" type="redirectAction">admin_list</result>
<!-- 3.列表展示 -->
<result name="list">/WEB-INF/list.jsp</result>

</action>

</package>
</struts>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息