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

JavaWeb登陆成功后跳转到上一个页面

2015-10-07 23:10 489 查看
JavaWeb登陆成功后跳转到上一个页面,这个标题注定要词不达意,你可能会遇到这样的情形,当点击页面的某个请求时,由于用户未登录,需要跳转到登录页,用户登录成功后,再跳转到上一个页面;还有一种情况,多个页面都有登录按钮,登录成功后需要刷新对应的登录信息。

图文并茂

1.场景1







2.场景2







代码实现

场景1的代码这次重点说明以下,场景2的代码可以参照本系列其他文章再谈ajax局部刷新

全局拦截器

public class LoginInterceptor implements Interceptor {
private static Logger logger = Logger.getLogger(LoginInterceptor.class);

@Override
public void intercept(Invocation inv) {
BaseController controller = (BaseController) inv.getController();
String lastRequestURL = controller.getRequest().getRequestURL().toString();

logger.info("请求地址:" + lastRequestURL);

Members loginMem = controller.getSessionAttr("username");

// 用户如果没有登录,那么就跳转到登录页面
if (loginMem == null || loginMem.equals("")) {

try {
controller.redirect("/mem/initLogin?forwardURL=" + URLEncoder.encode(lastRequestURL, "UTF-8"));
} catch (UnsupportedEncodingException e) {
logger.error(e.getMessage());
}

} else {
inv.invoke();
}
}
}


注意:

1. 全局拦截器可参照jfinal官方文档添加到config类中。

2. 如果用户没有登录,则跳转到登录页,并且将当前的url路径作为参数传递给form表单,至于form表单怎么获取,请看下个小节。

登录页

<form class="pop_login_form" action="${ctx}/mem/login?callbackType=forward" method="post"
onsubmit="return validateCallback(this, ajaxDone)">


注意:

1. action中增加callbackType=forward;

2. onsubmit中callback函数ajaxDone;

3. validateCallback函数中将上个小节中传递的参数进行添加;

4. 其余的可参照再谈ajax局部刷新

function validateCallback(form, callback, confirmMsg) {
var $form = $(form);

if (!$form.valid()) {
return false;
}

var _submitFn = function() {
$.ajax({
type : form.method || 'POST',
url : addForwardForUrl($form.attr("action")),
data : $form.serializeArray(),
dataType : "json",
cache : false,
success : callback || YUNM.ajaxDone,
error : YUNM.ajaxError
});
}

if (confirmMsg) {
$.showConfirm(confirmMsg, {
okCall : _submitFn
});
} else {
_submitFn();
}

return false;
}


function addForwardForUrl(url) {
var locationURL = location.href;
// URL中附带了跳转路径
var forwardIndex = locationURL.indexOf("forwardURL");
if (forwardIndex != -1) {
var forwardURL = locationURL.substring(forwardIndex);

// 说明已经有了跳转路径
if (url.indexOf("?") != -1) {
url += "&" + forwardURL;
} else {
url += "?" + forwardURL;
}
}
return url;
}


注意:

1. 如此之前拦截器中提供的url就可以作为参数传递给form的提交请求中。

login函数

@Clear({LoginInterceptor.class})
public void login() throws UnsupportedEncodingException {
logger.info("进行会员登录操作...");

// 获取用户名
String name = getPara("username");
// 获取密码
String password = getPara("password");

Members mem = Members.me.getMemByUsername(name);

if (mem != null) {// 用户不存在
// 密码不匹配
if (!mem.getStr("password").equals(CipherUtils.generatePassword(password))) {
ajaxDoneError("密码不正确!");
} else {
// 保存session
setSessionAttr("username", mem);

String forwardURL = getPara("forwardURL");

if (forwardURL == null || forwardURL.equals("")) {
forwardURL = "/";
} else {
forwardURL = URLDecoder.decode(forwardURL, "UTF-8");
}

ajaxDoneSuccess("登录成功!", forwardURL);
}

} else {
ajaxDoneError("用户不存在!");
}
}


1. login函数中,将forwardurl取出来,作为登录页中的callback函数的参数值;

2. 具体ajaxDoneSuccess方法可以参照以下内容

public void ajaxDoneSuccess(String message, String forwardURL) {
ajaxDone(200, message, forwardURL);
}
protected void ajaxDone(int statusCode, String message, String forwardURL) {
// 回调类型
if (getAttr("callbackType") == null) {
String callbackType = getPara("callbackType");
if (callbackType != null && !callbackType.equals("")) {
setAttr("callbackType", callbackType);

if (callbackType.equals("forward") || callbackType.equals("closeCurrentThenForward")) {
String contextPath = getRequest().getContextPath();

if (forwardURL.indexOf(contextPath) == -1) {
forwardURL = contextPath + forwardURL;
}

setAttr("forwardURL", forwardURL);
}
}
}

renderJson();
}


如果有callbacktype参数,则将forwardurl作为json数据传递到前端的ajaxdone方法中。

ajaxDone方法

function ajaxDone(json) {
YUNM.ajaxDone(json);
if (json[YUNM.keys.statusCode] == YUNM.statusCode.ok || json[YUNM.keys.statusCode] == YUNM.statusCode.info) {
if ("forward" == json.callbackType) {
if (json.forwardURL) {
location.href = json.forwardURL;
}
}


跳转到上一个页面。

笑对现实的无奈,不能后退的时候,不再傍徨的时候,永远向前 路一直都在──陈奕迅《路一直都在》

本文出自:【沉默王二的博客

当点击页面的某个请求时,由于用户未登录,需要跳转到登录页,用户登录成功后,再跳转到上一个页面
还有一种情况,多个页面都有登录按钮,登录成功后需要返回到上一个界面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息