客户端接口API信息输出优化

This commit is contained in:
thinkgem
2018-08-25 19:11:42 +08:00
parent c553d966d6
commit cfdc99f190
2 changed files with 57 additions and 34 deletions

View File

@@ -78,6 +78,21 @@ public class ServletUtils {
return response; return response;
} }
/**
* 支持AJAX的页面跳转
*/
public static void redirectUrl(HttpServletRequest request, HttpServletResponse response, String url){
try {
if (ServletUtils.isAjaxRequest(request)){
request.getRequestDispatcher(url).forward(request, response); // AJAX不支持Redirect改用Forward
}else{
response.sendRedirect(request.getContextPath() + url);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/** /**
* 是否是Ajax异步请求 * 是否是Ajax异步请求
* @param request * @param request
@@ -173,9 +188,10 @@ public class ServletUtils {
resultMap.put("data", data); resultMap.put("data", data);
} }
} }
HttpServletRequest request = ServletUtils.getRequest(); HttpServletRequest request = getRequest();
String uri = request.getRequestURI(); String uri = request.getRequestURI();
if (StringUtils.endsWithIgnoreCase(uri, ".xml")){ if (StringUtils.endsWithIgnoreCase(uri, ".xml") || StringUtils
.equalsIgnoreCase(request.getParameter("__ajax"), "xml")){
return XmlMapper.toXml(resultMap); return XmlMapper.toXml(resultMap);
}else{ }else{
String functionName = request.getParameter("__callback"); String functionName = request.getParameter("__callback");
@@ -202,7 +218,7 @@ public class ServletUtils {
/** /**
* 直接将结果JSON字符串渲染到客户端支持JsonP请求参数加__callback=回调函数名) * 直接将结果JSON字符串渲染到客户端支持JsonP请求参数加__callback=回调函数名)
* @param response 渲染对象:{result:'true',message:'',data:{}} * @param response 渲染对象:{result:'true',message:'',data:{}}
* @param result Global.TRUE or Globle.False * @param result 结果标识:Global.TRUE or Globle.False
* @param message 执行消息 * @param message 执行消息
* @param data 消息数据 * @param data 消息数据
* @return null * @return null
@@ -212,16 +228,18 @@ public class ServletUtils {
} }
/** /**
* 将对象转换为JSON字符串渲染到客户端支持JsonP请求参数加__callback=回调函数名) * 将对象转换为JSON、XML、JSONP字符串渲染到客户端JsonP请求参数加__callback=回调函数名)
* @param request 请求对象用来得到输出格式的指令JSON、XML、JSONP
* @param response 渲染对象 * @param response 渲染对象
* @param object 待转换JSON并渲染的对象 * @param object 待转换JSON并渲染的对象
* @return null * @return null
*/ */
public static String renderObject(HttpServletResponse response, Object object) { public static String renderObject(HttpServletResponse response, Object object) {
HttpServletRequest request = ServletUtils.getRequest(); HttpServletRequest request = getRequest();
String uri = request.getRequestURI(); String uri = request.getRequestURI();
if (StringUtils.endsWithIgnoreCase(uri, ".xml")){ if (StringUtils.endsWithIgnoreCase(uri, ".xml") || StringUtils
return XmlMapper.toXml(object); .equalsIgnoreCase(request.getParameter("__ajax"), "xml")){
return renderString(response, XmlMapper.toXml(object));
}else{ }else{
String functionName = request.getParameter("__callback"); String functionName = request.getParameter("__callback");
if (StringUtils.isNotBlank(functionName)){ if (StringUtils.isNotBlank(functionName)){
@@ -250,8 +268,18 @@ public class ServletUtils {
*/ */
public static String renderString(HttpServletResponse response, String string, String type) { public static String renderString(HttpServletResponse response, String string, String type) {
try { try {
// response.reset(); // 注释掉否则以前设置的Header会被清理掉如ajax登录设置记住我Cookie // response.reset(); // 注释掉否则以前设置的Header会被清理掉如ajax登录设置记住我Cookie信息
response.setContentType(type == null ? "application/json" : type); if (type == null){
if ((StringUtils.startsWith(string, "{") && StringUtils.endsWith(string, "}"))
|| (StringUtils.startsWith(string, "[") && StringUtils.endsWith(string, "]"))){
type = "application/json";
}else if (StringUtils.startsWith(string, "<") && StringUtils.endsWith(string, ">")){
type = "application/xml";
}else{
type = "text/html";
}
}
response.setContentType(type);
response.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8");
response.getWriter().print(string); response.getWriter().print(string);
} catch (IOException e) { } catch (IOException e) {

View File

@@ -54,7 +54,8 @@ public class LoginController extends BaseController{
if (StringUtils.containsIgnoreCase(request.getRequestURI(), ";JSESSIONID=")){ if (StringUtils.containsIgnoreCase(request.getRequestURI(), ";JSESSIONID=")){
String queryString = request.getQueryString(); String queryString = request.getQueryString();
queryString = queryString == null ? "" : "?" + queryString; queryString = queryString == null ? "" : "?" + queryString;
return REDIRECT + adminPath + "/login" + queryString; ServletUtils.redirectUrl(request, response, adminPath + "/login" + queryString);
return null;
} }
LoginInfo loginInfo = UserUtils.getLoginInfo(); LoginInfo loginInfo = UserUtils.getLoginInfo();
@@ -63,16 +64,8 @@ public class LoginController extends BaseController{
if(loginInfo != null){ if(loginInfo != null){
String queryString = request.getQueryString(); String queryString = request.getQueryString();
queryString = queryString == null ? "" : "?" + queryString; queryString = queryString == null ? "" : "?" + queryString;
String indexUrl = adminPath + "/index" + queryString; ServletUtils.redirectUrl(request, response, adminPath + "/index" + queryString);
if (ServletUtils.isAjaxRequest(request)){ return null;
try {
request.getRequestDispatcher(indexUrl).forward(request, response); // AJAX不支持Redirect改用Forward
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
return null;
}
return REDIRECT + indexUrl;
} }
// 如果是登录操作跳转到此则认为是登录失败支持GET登录时传递__login=true参数 // 如果是登录操作跳转到此则认为是登录失败支持GET登录时传递__login=true参数
@@ -130,16 +123,8 @@ public class LoginController extends BaseController{
if(loginInfo != null){ if(loginInfo != null){
String queryString = request.getQueryString(); String queryString = request.getQueryString();
queryString = queryString == null ? "" : "?" + queryString; queryString = queryString == null ? "" : "?" + queryString;
String indexUrl = adminPath + "/index" + queryString; ServletUtils.redirectUrl(request, response, adminPath + "/index" + queryString);
if (ServletUtils.isAjaxRequest(request)){ return null;
try {
request.getRequestDispatcher(indexUrl).forward(request, response); // AJAX不支持Redirect改用Forward
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
return null;
}
return REDIRECT + indexUrl;
} }
String username = WebUtils.getCleanParam(request, FormAuthenticationFilter.DEFAULT_USERNAME_PARAM); String username = WebUtils.getCleanParam(request, FormAuthenticationFilter.DEFAULT_USERNAME_PARAM);
@@ -202,12 +187,16 @@ public class LoginController extends BaseController{
if (StringUtils.containsIgnoreCase(request.getRequestURI(), ";JSESSIONID=")){ if (StringUtils.containsIgnoreCase(request.getRequestURI(), ";JSESSIONID=")){
String queryString = request.getQueryString(); String queryString = request.getQueryString();
queryString = queryString == null ? "" : "?" + queryString; queryString = queryString == null ? "" : "?" + queryString;
return REDIRECT + adminPath + "/index" + queryString; ServletUtils.redirectUrl(request, response, adminPath + "/index" + queryString);
return null;
} }
// 验证下用户权限以便调用doGetAuthorizationInfo方法保存单点登录登出句柄 // 验证下用户权限以便调用doGetAuthorizationInfo方法保存单点登录登出句柄
if (!SecurityUtils.getSubject().isPermitted("user")){ if (!SecurityUtils.getSubject().isPermitted("user")){
return REDIRECT + adminPath + "/login"; String queryString = request.getQueryString();
queryString = queryString == null ? "" : "?" + queryString;
ServletUtils.redirectUrl(request, response, adminPath + "/login" + queryString);
return null;
} }
//获取登录用户信息 //获取登录用户信息
@@ -216,14 +205,20 @@ public class LoginController extends BaseController{
// 未加载shiro模块时会为空直接访问则提示操作权限不足。 // 未加载shiro模块时会为空直接访问则提示操作权限不足。
if(loginInfo == null){ if(loginInfo == null){
UserUtils.getSubject().logout(); UserUtils.getSubject().logout();
return REDIRECT + adminPath + "/login"; String queryString = request.getQueryString();
queryString = queryString == null ? "" : "?" + queryString;
ServletUtils.redirectUrl(request, response, adminPath + "/login" + queryString);
return null;
} }
// 当前用户对象信息 // 当前用户对象信息
User user = UserUtils.get(loginInfo.getId()); User user = UserUtils.get(loginInfo.getId());
if (user == null){ if (user == null){
UserUtils.getSubject().logout(); UserUtils.getSubject().logout();
return REDIRECT + adminPath + "/login"; String queryString = request.getQueryString();
queryString = queryString == null ? "" : "?" + queryString;
ServletUtils.redirectUrl(request, response, adminPath + "/login" + queryString);
return null;
} }
model.addAttribute("user", user); // 设置当前用户信息 model.addAttribute("user", user); // 设置当前用户信息