这个问题很深刻啊,假如你还没登陆,就从购物网站提交订单,这个时候购物网站会提醒你:亲,你还没有登陆!
这个时候我们需要做的就是这么个功能,我们怎么实现这个代码呢!我以SSH为例啊。
首先我们得写一个校验类去检验session中是否有用户的信息,我一般是把用户信息保存到session,这样方便后面调用。这里其实有两种方法,一种就是直接在需要用到用户信息的类中,从session中取数据,进而进行一定的逻辑判断,第二种在后面说明
第一种:
User existUser = (User) ServletActionContext.getRequest().getSession()
.getAttribute("existUser");
if(existUser == null){
addActionError("亲!您还没有登陆!请先登陆");
return "login";
}
这个是比较简单的,逻辑也是比较清楚的,但是要是针对某一类都得进行登陆校验,怎么办,每个代码块都加这个嘛,肯定不行,所以有了第二种
public class PrivilegeInterceptor extends MethodFilterInterceptor{
@Override
//执行拦截的方法
protected String doIntercept(ActionInvocation arg0) throws Exception {
//判断session中是否有后台用户的信息
AdminUser existAdminUser = (AdminUser) ServletActionContext.getRequest().getSession()
.getAttribute("existAdminUser");
if(existAdminUser == null){
//没有登陆
ActionSupport actionSupport = (ActionSupport) arg0.getAction();
actionSupport.addActionError("亲,您还没有他妈的登陆");
return "loginFail";
}else{
//已经登陆
return arg0.invoke();
}
}
}
这个类继承MethodFilterInterceptor这个类,主要用于每次校验,自行百度吧。然后吧这个配置到struts.xml文件中就可以了
<interceptors>
<interceptor name="PrivilegeInterceptor" class="校验类的路径地址"/>
</interceptors>
<!-- 配置首页访问的Action -->
<action name="index" class="indexAction">
<result name="index">/WEB-INF/jsp/index.jsp</result>
<interceptor-ref name="PrivilegeInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
正如上面代码所示,必须在struts.xml文件中配置,这样你每次使用到这个action的时候就会进行一次PrivilegeInterceptor类中所写的校验,这个说方便也方便,说不方便也不方便,关键看应用场景,对,适合才合适