简单登陆后的权限验证
1.UserAction
public String login(){
//为防止用户重复提交同一请求(当直接在地址栏输入请求时,)
session=context.getSession();//首先获取session
User userSession=(User)session.get("user");
if(userSession==null){//如果没有获取到session,return SUCCESS;
if(user!=null){//继续判断,用户是否传递了参数
if(new UserDao().login(user)){//继续判断,如果用户名密码正确
session.put("user", user);//将用户信息放到session中
return SUCCESS;
}else{
error="用户名或密码错误";//如果用户名不正确,显示一下错误信息,
return "error";
}
}else{
error="用户名或密码错误";//没有传递参数,在界面显示一下错误信息,
return "error";
}
}else{
return SUCCESS;//如果获取到session,return SUCCESS;
}
}
2.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>
<constant name="struts.enable.DynamicMethodInvocation" value="false" /><!-- 动态方法激发,默认是false -->
<constant name="struts.devMode" value="true" /><!-- 跟踪,生成很多调试信息,开发时写为true -->
<package name="default" extends="struts-default">
<!-- 用户登录拦截器配置 -->
<!-- 定义一个拦截器 -->
<interceptors>
<!-- 拦截器位置(自定义的拦截器类) -->
<interceptor name="userInterceptor" class="com.maya.interceptor.UserInterceptor"></interceptor>
<!-- 为方便自定义的拦截器栈(我们可以把自定义的多个拦截器,放到这里面,然后直接调用该拦截器栈即可) -->
<interceptor-stack name="myStack">
<interceptor-ref name="userInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!--
使当前包的所有请求,都会被拦截器拦截,当然有些公共页面是不需要拦截的,所以就在其中加上
<interceptor-ref name="defaultStack"></interceptor-ref>
-->
<default-interceptor-ref name="myStack"></default-interceptor-ref>
<!-- result全局配置错误页面,一般每个action都是需要一个错误界面的 -->
<global-results>
<result name="error">error.jsp</result>
</global-results><!-- 用户的登陆请求 -->
<action name="User_login" class="com.maya.interceptor.UserAction" method="login">
<result name="success" type="redirectAction">
<param name="actionName">Info_findall</param>
</result>
<result name="error">User_login.jsp</result>
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 排除当前请求受到拦截器的影响 -->
</action>
</package>
</struts>
3.拦截器
package com.maya.interceptor;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class UserInterceptor implements Interceptor {除了实现Iterceptor接口外,我们还可以继承AbstractInterceptor这个类,实现其中的intercept(ActionInvocation invocation)方法即可
@Override
public void destroy() {
//销毁方法
}
@Override
public void init() {
//初始化方法
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext context=invocation.getInvocationContext();//获取Context上下文
Map<String, Object> session=context.getSession();//获取session
User user=(User)session.get("user");//判断是否登陆
String result=null;
if(user==null){
result="error";
}else{
result=invocation.invoke();//如果登陆了,就继续往下执行
}
return result;
}
}