为了防止重复登录问题,这里写了个例子
这里我先说一下我的思路:
首先进入页面会请求某个控制器的index()方法,这段代码就是我粘贴的第二段代码,在请求index()方法之前会进CheckTokenInterceptor.class,进入这个方法创建blogToken,然后把值放入页面的隐藏域里,随后进行登录操作,登录时会取blogToken的值,取到返回true,反之返回false,然后就确保重复登录问题,进行登录操作。
public class CheckTokenInterceptor implements Interceptor{
public void intercept(ActionInvocation ai) {
//创建token,这里是一进页面会获得token的一个值,刷新页面值会变化
ai.getController().createToken("blogToken");
ai.invoke();
}
}
@Before({CheckTokenInterceptor.class})
public void index(){
...//这里是第一次进页面出现的一些方法
render("/index.jsp");
}
/**
* 前台登录
*/
public void login(){
boolean flag = this.validateToken("blogToken");//如果验证是true,则表示第一次登录,false表示重复登陆
if(flag){
User user = getModel(User.class); //把前台需要的值根据getModel()放入一个实体中
String md5Pwd = MD5Encrypt.encode(user.getStr("pwd")); //转换成md5加密格式
User uu = User.dao.checkLogin(user.getStr("account"),md5Pwd);
if(uu == null){
render("/index.jsp");
}else {
setSessionAttr("user", uu); //往session中赋值
render("/index.jsp");//重定向
}
}else{
forwardAction("/user");
}
}
这里很重要的一点,页面上
<input type="hidden" name="blogToken" value="${blogToken}" />