use of com.duangframework.core.exceptions.DuangMvcException in project duangframework by tcrct.
the class ActionHandle method execute.
@Override
public void execute(String target, IRequest request, IResponse response) throws Exception {
// 请求的URL中如果包含有. 则全部当作是静态文件的请求处理,直接返回
if (target.contains(".")) {
return;
}
// 分号后的字符截断
if (target.contains(";")) {
target = target.substring(0, target.indexOf(";"));
}
// 暂不支持根目录请求
if ("/".equals(target)) {
return;
}
Action action = InstanceFactory.getActionMapping().get(target);
if (null == action) {
action = getRestfulActionMapping(request, target);
if (null == action) {
throw new DuangMvcException("action is null or access denied");
}
}
Class<?> controllerClass = action.getControllerClass();
BaseController controller = null;
// 是否单例
if (action.isSingleton()) {
controller = (BaseController) BeanUtils.getBean(action.getControllerClass(), controllerClass);
} else {
// 如果不是设置为单例模式的话就每次请求都创建一个新的Controller对象
controller = ClassUtils.newInstance(controllerClass);
// 还要重新执行Ioc注入
IocHelper.ioc(controller.getClass());
}
// 传入request, response到Controller
controller.init(request, response);
// 取出方法对象
Method method = action.getMethod();
// 取消类型安全检测(可提高反射性能)
method.setAccessible(true);
// 反射执行方法
method.invoke(controller, NULL_ARGS);
// 返回结果
controller.getRender().setContext(request, response).render();
}
use of com.duangframework.core.exceptions.DuangMvcException in project duangframework by tcrct.
the class JsonRender method render.
@Override
public void render() {
if (null == request || null == response) {
logger.warn("request or response is null");
return;
}
setDefaultValue2Response();
try {
response.setContentType(defaultContentType);
response.setCharacterEncoding(ENCODING);
if (ToolsKit.isNotEmpty(fieldFilterSet)) {
CustomFieldPropertyFilter customFieldPropertyFilter = new CustomFieldPropertyFilter(fieldFilterSet);
SerializeWriter serializeWriter = new SerializeWriter();
JSONSerializer serializer = new JSONSerializer(serializeWriter);
serializer.setDateFormat("yyyy-MM-dd HH:mm:ss");
serializer.getPropertyFilters().add(customFieldPropertyFilter);
// https://github.com/alibaba/fastjson/wiki/Class_Level_SerializeFilter
// SerializeConfig.getGlobalInstance().addFilter(A.class, customFieldPropertyFilter);
serializer.write(obj);
response.write(serializeWriter.toString());
fieldFilterSet.clear();
} else {
response.write(obj);
}
} catch (Exception e) {
logger.warn("returnJson exception: " + e.getMessage(), e);
throw new DuangMvcException(e.getMessage(), e);
}
}
use of com.duangframework.core.exceptions.DuangMvcException in project duangframework by tcrct.
the class XmlRender method render.
public void render() {
if (null == request || null == response) {
logger.warn("request or response is null");
return;
}
setDefaultValue2Response();
try {
if (contentType == null) {
response.setContentType(defaultContentType);
} else {
response.setContentType(contentType);
response.setCharacterEncoding(ENCODING);
}
response.write(text);
} catch (Exception e) {
throw new DuangMvcException(e.getMessage(), e);
}
}
use of com.duangframework.core.exceptions.DuangMvcException in project duangframework by tcrct.
the class CORSHandle method execute.
/**
* 执行处理器
* @param target 请求URI
* @param request 请求对象
* @param response 返回对象
* @throws Exception
*/
@Override
public void execute(String target, IRequest request, IResponse response) throws Exception {
if (ToolsKit.isEmpty(allowHostMap)) {
return;
}
String host = "";
boolean isAllowAccess = false;
String allowhost = request.getHeader("Host");
if (ToolsKit.isEmpty(allowhost)) {
allowhost = request.getHeader("Origin");
if (ToolsKit.isEmpty(allowhost)) {
allowhost = request.getHeader("Referer");
}
if (ToolsKit.isEmpty(allowhost)) {
allowhost = request.getRequestURL().toString();
}
if (ToolsKit.isEmpty(allowhost)) {
String key = request.getParameter("allowhost");
allowhost = allowHostMap.get(key);
}
}
if (ToolsKit.isNotEmpty(allowhost)) {
host = allowhost.toLowerCase().replace(PROTOCOL, "").replace(PROTOCOLS, "").replace("*", "");
int endIndex = host.indexOf(":");
host = host.substring(0, endIndex > -1 ? endIndex : host.length());
if (host.startsWith("127.0") || host.startsWith("192.168") || host.toLowerCase().startsWith("localhost")) {
isAllowAccess = true;
} else {
// isAllowAccess = allowHostMap.containsValue(host);
for (Iterator<Map.Entry<String, String>> iterator = allowHostMap.entrySet().iterator(); iterator.hasNext(); ) {
Map.Entry<String, String> entry = iterator.next();
if (host.contains(entry.getValue())) {
isAllowAccess = true;
break;
}
}
}
}
if (isAllowAccess) {
response.setHeader("Access-Control-Allow-Origin", host);
response.setHeader("Access-Control-Allow-Credentials", "true");
String allowString = "Accept,Content-Type,Access-Control-Allow-Headers,Authorization,X-Requested-With,Authoriza,duang-token-id";
if (ToolsKit.isEmpty(accessControlAllowHeaders)) {
accessControlAllowHeaders = allowString;
String[] arrayItem = ConfigKit.duang().key("allow.host.headers").asArray();
if (ToolsKit.isNotEmpty(arrayItem)) {
for (String allowItem : arrayItem) {
accessControlAllowHeaders += "," + allowItem;
}
}
}
response.setHeader("Access-Control-Allow-Headers", accessControlAllowHeaders);
// 如果是OPTIONS请求且符合CORS规则,则返回200
if (HttpMethod.OPTIONS.name().equalsIgnoreCase(request.getMethod())) {
TextRender render = new TextRender("200");
render.setContext(request, response).render();
return;
}
} else {
throw new DuangMvcException("the reqeust is not allow");
}
}
use of com.duangframework.core.exceptions.DuangMvcException in project duangframework by tcrct.
the class TextRender method render.
@Override
public void render() {
if (null == request || null == response) {
logger.warn("request or response is null");
return;
}
setDefaultValue2Response();
try {
if (contentType == null) {
response.setContentType(defaultContentType);
} else {
response.setContentType(contentType);
response.setCharacterEncoding(ENCODING);
}
response.write(text);
} catch (Exception e) {
throw new DuangMvcException(e.getMessage(), e);
}
}
Aggregations