1 页面部分
<script type="text/javascript" src="<c:url value = '/resources/thirdparty/jquery.base64.js'/>"></script>
var ctx = "${pageContext.request.contextPath}";
function downloadOpt(item){
var param = {};
param.revitId = $(item).data("id");
param.toUrl = $.base64.encode(location.pathname + "?revitAddInId=" + $(item).data("id"));
$.post(ctx + "/revit/getDownloadPluginLink.html", param, function(data) {
if(data.success){
location.href = data.data;
}else{
var errorMessage = data.message.split(":")[0];
error(errorMessage);
if (errorMessage.indexOf("登录") != -1) {
location = "${pageContext.request.contextPath}" + "/loginPersonal.html";
}
}
});
}
2.拦截器实现
//下载时候要登录
public class RevitInterceptor extends HandlerInterceptorAdapter {
private static final Logger LOGGER = LoggerFactory.getLogger(RevitInterceptor.class);
private @Autowired RequirementService requirementService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String shortUri = ServletUtils.getShortUri(request);
OnlineUser user = SessionHelper.getOnlineUser(request.getSession());
HttpSession session = request.getSession();
String toUrl = null;
if (shortUri.contains("list.html") || shortUri.contains("details.html")||shortUri.contains("authorInfo.html")
|| shortUri.contains("getPoolMoney.html")|| shortUri.contains("getPersonMoney.html")||shortUri.contains("getBetResult.html")) {
//Long reqId = null;
try {
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
}
return true;
}
if (null == user) {
toUrl = request.getParameter("toUrl");//获得登陆后回跳地址
if (isAsyncRequest(request)) {
if (toUrl != null) {
session.setAttribute("toUrl", new String(Base64.decodeBase64(toUrl)));//回跳地址写入session
}
response.setContentType("application/json");
Writer.write(response, Ajax.buildErrorResult("您没有登录,请先登录!"));
} else {
if (toUrl != null) {
session.setAttribute("toUrl", toUrl);
} else {
session.setAttribute("toUrl", request.getRequestURI() + "?" + request.getQueryString());
}
response.sendRedirect(request.getContextPath() + RedirectURL.LOGIN_PERSONAL);
}
return false;
}
return true;
}
private boolean isAsyncRequest(HttpServletRequest request) {
return request.getHeader("X-Requested-With") != null;
}
}
3.先跳到登录控制器
@RequestMapping(value = "loginPersonal")
public ModelAndView loginDesign(HttpSession session) {
ModelAndView view = new ModelAndView();
String toUrl = (String) session.getAttribute("toUrl");
view.addObject("toUrl", toUrl); //再把url 放到页面 hidden
view.setViewName("/user/loginDesign");
return view;
}
4
<div class="revitbus-init-page-box">
<div id="personal" class="revitbus-init-page-box-personal personal-enterprise ">
<input type="hidden" name="toUrl" value="${toUrl}">
<input type="text" name="username" class="form-control" placeholder="用户名/手机号" οnkeydοwn="onInputFinishEnter(event);">
<input type="password" name="password" class="form-control" placeholder="密码" οnkeydοwn="onInputFinishEnter(event);">
</div>
<div>
<input type="text" class="form-control" name="code" placeholder="请输入右侧公式结果" style="width:170px;margin-right:20px;" οnkeydοwn="onInputFinishEnter(event);">
<img class="revitbus-login-page-code" alt="" src="<c:url value='/code.html' />">
</div>
<a class="rvt-login-design" οnclick="onLogin();"><button>登录</button></a>
<!-- <input name="Fruit" type="checkbox" value="" style="margin: 0 10px;" />记住密码 -->
<div class="revitbus-init-page-box-registered">
<div class="pull-left">
<a href="<c:url value='/forgetPwdPersonal.html' />">忘记密码</a>
</div>
<div class="pull-right">
<a href="<c:url value='/registerPersonal.html' />">注册</a>
</div>
<div class="clearfix"></div>
</div>
</div>
js登录 跳转tourl
function onLogin(){
var code = $("input[name='code']").val();
var pwd = $("input[name='password']").val();
var userName = $("input[name='username']").val();
if(userName.length == 0){
info("请输入账号");
return;
}
if(pwd.length == 0){
info("请输入密码");
return;
}
if(code.length == 0){
info("请输入验证码");
return;
}
var url = '/revitbus/login/personal.html';
var param = {};
param['username'] = userName;
param['password'] = hex_md5(pwd);
param['code'] = code;
var toUrl = $("input[name='toUrl']").val();
var forward = "/revitbus/welcome.html";
if(!(toUrl == "")){
if(toUrl != forward){
forward = toUrl;
}
}
$.post(url,param,function(data) {
if (data.success) {
window.location.href = forward;
} else {
console.log(data);
error(data.message);
}
});
}
另外一种方法 前2步都一样
再加上以下内容
在加一个登录的拦截器 :类似于第二步
拦截下 tourl 属性 有的话 跳转 下面大致写下 没有验证 做一个重定向
在类似以下方法中
- /**
- * 在业务处理器处理请求执行完成后,生成视图之前执行的动作
- * 可在modelAndView中加入数据,比如当前时间
- */
- @Override
- public void postHandle(HttpServletRequest request,
- HttpServletResponse response, Object handler,
- ModelAndView modelAndView) throws Exception {
- log.info("==============执行顺序: 2、postHandle================");
- if(modelAndView != null){ //加入当前时间
- modelAndView.addObject("var", "测试postHandle");
- }
- }
加入以下内容
if (null == user) {
toUrl = request.getParameter("toUrl");
if (isAsyncRequest(request)) {
if (toUrl != null) {
session.setAttribute("toUrl", new String(Base64.decodeBase64(toUrl)));
}
response.setContentType("application/json");
response.sendRedirect(toUrl); //可以试试 应该可以 大致思路这样
} else {
.................
}
return false;
}