Search in sources :

Example 1 with DuangMvcException

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();
}
Also used : Action(com.duangframework.mvc.core.Action) BaseController(com.duangframework.mvc.core.BaseController) Method(java.lang.reflect.Method) DuangMvcException(com.duangframework.core.exceptions.DuangMvcException)

Example 2 with DuangMvcException

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);
    }
}
Also used : SerializeWriter(com.alibaba.fastjson.serializer.SerializeWriter) DuangMvcException(com.duangframework.core.exceptions.DuangMvcException) DuangMvcException(com.duangframework.core.exceptions.DuangMvcException) JSONSerializer(com.alibaba.fastjson.serializer.JSONSerializer)

Example 3 with DuangMvcException

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);
    }
}
Also used : DuangMvcException(com.duangframework.core.exceptions.DuangMvcException) DuangMvcException(com.duangframework.core.exceptions.DuangMvcException)

Example 4 with DuangMvcException

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");
    }
}
Also used : TextRender(com.duangframework.mvc.render.TextRender) DuangMvcException(com.duangframework.core.exceptions.DuangMvcException) Map(java.util.Map) HashMap(java.util.HashMap)

Example 5 with DuangMvcException

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);
    }
}
Also used : DuangMvcException(com.duangframework.core.exceptions.DuangMvcException) DuangMvcException(com.duangframework.core.exceptions.DuangMvcException)

Aggregations

DuangMvcException (com.duangframework.core.exceptions.DuangMvcException)5 JSONSerializer (com.alibaba.fastjson.serializer.JSONSerializer)1 SerializeWriter (com.alibaba.fastjson.serializer.SerializeWriter)1 Action (com.duangframework.mvc.core.Action)1 BaseController (com.duangframework.mvc.core.BaseController)1 TextRender (com.duangframework.mvc.render.TextRender)1 Method (java.lang.reflect.Method)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1