package cn.ylu.stxy.xj2014.controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.AuthorizationException;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import com.google.gson.Gson;
import cn.ylu.stxy.xj2014.parameter.Attribute;
import cn.ylu.stxy.xj2014.parameter.Categorys;
import cn.ylu.stxy.xj2014.parameter.Directory;
import cn.ylu.stxy.xj2014.vo.ResultVo;
import cn.ylu.stxy.xj2014.vo.UserVo;
public class BaseController {
protected HttpServletRequest request;
protected HttpServletResponse response;
public int defEnd = 0;
public int defSTART = 29;
protected Gson gson = new Gson();
@ModelAttribute
public void setReqAndResp(HttpServletRequest request, HttpServletResponse response) {
this.request = request;
this.response = response;
}
/**
* 登录认证异常
*/
// @ExceptionHandler({ UnauthenticatedException.class,
// AuthenticationException.class })
/* @ExceptionHandler({ UnauthenticatedException.class})
public String authenticationException(HttpServletRequest request, HttpServletResponse response) {
if (isAjaxRequest(request)) {
// 输出JSON
System.out.println("检测到Ajax");
Map<String, Object> map = new HashMap<String, Object>();
map.put("code", "-999");
map.put("message", "未登录");
writeJson(map, response);
return null;
} else {
return "redirect:/system/login";
}
}*/
/**
* 权限异常
*/
@ExceptionHandler(AuthorizationException.class)
public String authorizationException(HttpServletRequest request, HttpServletResponse response) {
if (isAjaxRequest(request)) {
// 输出JSON
ResultVo resultVo = failed();
writeJson(resultVo, response);
return null;
} else {
return "redirect:404";
}
}
/**
* 输出JSON
*
* @param response
* @author SHANHY
* @create 2017年4月4日
*/
private void writeJson(ResultVo resultVo, HttpServletResponse response) {
PrintWriter out = null;
try {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
out = response.getWriter();
out.write(gson.toJson(resultVo));
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
out.close();
}
}
}
/**
* 是否是Ajax请求
*
* @param request
* @return 日
*/
public static boolean isAjaxRequest(HttpServletRequest request) {
String requestedWith = request.getHeader("x-requested-with");
if (requestedWith != null && requestedWith.equalsIgnoreCase("XMLHttpRequest")) {
return true;
} else {
return false;
}
}
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Date.class,
new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true));
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
}
/**
* 返回主目录页面
*
* @param htmlName
* @return
*/
public String HtmlModel(String htmlName) {
return "/" + htmlName;
}
/**
* 重定向
*
* @param htmlName
* @return
*/
public String redirectHtmlModel(String htmlName) {
return "redirect:" + HtmlModel(htmlName);
}
/**
* 返回含目录页面
*
* @param directory
* @param htmlName
* @return
*/
public String HtmlModel(Directory directory, String htmlName) {
return "/" + directory.val() + "/" + htmlName;
}
/**
* 重定向
*
* @param directory
* @param htmlName
* @return
*/
public String redirectHtmlModel(Directory directory, String htmlName) {
return "redirect:" + HtmlModel(directory, htmlName);
}
public ResultVo success() {
return success(null);
}
public ResultVo success(Object data) {
ResultVo result = new ResultVo();
result.setState(true); // 默认返回成功
result.setData(data);
result.setStateCode(Categorys.CG.val());
result.setMessage("操作成功");
return result;
}
public ResultVo success(Object data, String mess) {
ResultVo resultVo = success(data);
resultVo.setMessage(mess);
return resultVo;
}
public ResultVo failed() {
ResultVo result = new ResultVo();
result.setMessage("权限不足");
result.setState(false); // 默认返回成功
result.setStateCode(Categorys.SB.val());
result.setData(null);
return result;
}
public ResultVo error() {
ResultVo result = new ResultVo();
result.setMessage("系统错误");
result.setState(false); // 默认返回成功
result.setStateCode(Categorys.ERROR.val());
result.setData(null);
return result;
}
public ResultVo error(String msg) {
ResultVo result = error();
result.setMessage(msg);
return result;
}
public ResultVo error(String stateCode, String msg) {
ResultVo result = error(msg);
result.setStateCode(stateCode);
return result;
}
/**
* 获取shiro 的session
*
* @return
*/
protected Session getSession() {
Subject subject = SecurityUtils.getSubject();
Session session = subject.getSession();
return session;
}
/**
* 获取登录用户信息
*
* @return
*/
public UserVo getUserVo() {
Object session = request.getSession().getAttribute(Attribute.LOGIN_USER.getName());
return session == null ? null : (UserVo) session;
}
/**
* 获取请求完整路径
*
* @param request
* @return
*/
public String getUrl(HttpServletRequest request) {
String url = request.getRequestURI();
String params = "";
if (request.getQueryString() != null) {
params = request.getQueryString().toString();
}
if (!"".equals(params)) {
url = url + "?" + params;
}
return url;
}
/**
* 获取日期
*
* @param day
* 天
*/
public String getDate(int day) {
StringBuffer s = new StringBuffer();
Calendar c = Calendar.getInstance();
int currentDay = c.get(Calendar.DATE);
if (day < 0) {
c.add(Calendar.YEAR, -1);
c.set(Calendar.DATE, currentDay);
} else if (day == 29) {
c.add(Calendar.MONTH, -1);
c.set(Calendar.DATE, currentDay);
} else {
c.add(Calendar.DATE, -day);
}
s.append(c.get(Calendar.YEAR) + "-");
s.append((c.get(Calendar.MONTH) + 1) < 10 ? ("0" + (c.get(Calendar.MONTH) + 1)) : (c.get(Calendar.MONTH) + 1));
s.append("-");
s.append(c.get(Calendar.DATE) < 10 ? ("0" + c.get(Calendar.DATE)) : c.get(Calendar.DATE));
return s.toString();
}
protected String log() {
String methodName = Thread.currentThread().getStackTrace()[2].getMethodName();
StringBuilder stringBuilder = new StringBuilder(getUserVo() == null ? "" : getUserVo().getName());
stringBuilder.append("请求").append(methodName);
return stringBuilder.toString();
}
protected String log(Map map) {
String methodName = Thread.currentThread().getStackTrace()[2].getMethodName();
StringBuilder stringBuilder = new StringBuilder(getUserVo() == null ? "" : getUserVo().getName());
stringBuilder.append("请求").append(methodName).append(gson.toJson(map));
return stringBuilder.toString();
}
protected String log(Object map) {
String methodName = Thread.currentThread().getStackTrace()[2].getMethodName();
StringBuilder stringBuilder = new StringBuilder(getUserVo() == null ? "" : getUserVo().getName());
stringBuilder.append("请求").append(methodName);
try {
stringBuilder.append(gson.toJson(map));
} catch (Exception e) {
stringBuilder.append(map.toString());
}
return stringBuilder.toString();
}
}