diff --git a/src/main/java/Bootstrap.java b/src/main/java/Bootstrap.java index da3ab33..af0fd32 100644 --- a/src/main/java/Bootstrap.java +++ b/src/main/java/Bootstrap.java @@ -11,9 +11,7 @@ import java.security.ProtectionDomain; import java.util.HashMap; import java.util.Map; -import java.util.Properties; -import org.apache.log4j.PropertyConfigurator; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.util.StringUtil; import org.eclipse.jetty.webapp.WebAppContext; @@ -57,8 +55,6 @@ public static void main(String[] args) throws Exception { getOrCreateEnv(PREFIX + "host", null); String logPath = getOrCreateEnv(PREFIX + "log", "log/jcoder.log"); - createLog4jConfig(logPath); - String home = getOrCreateEnv(PREFIX + "home", new File(System.getProperty("user.home"), ".jcoder").getAbsolutePath()); int port = Integer.parseInt(getOrCreateEnv(PREFIX + "port", "8080")); @@ -71,7 +67,7 @@ public static void main(String[] args) throws Exception { File jcoderHome = new File(home); - makeFiles(jcoderHome); + makeFiles(jcoderHome, logPath); context.setTempDirectory(new File(jcoderHome, "tmp")); context.setContextPath("/"); @@ -102,20 +98,26 @@ public static void main(String[] args) throws Exception { * config log4j setting * * @param logPath + * @throws IOException + * @throws FileNotFoundException */ - private static void createLog4jConfig(String logPath) { - Properties pro = new Properties(); - pro.put("log4j.rootLogger", "info, stdout,R"); - pro.put("log4j.appender.stdout", "org.apache.log4j.ConsoleAppender"); - pro.put("log4j.appender.stdout.layout", "org.apache.log4j.PatternLayout "); - pro.put("log4j.appender.stdout.layout.ConversionPattern", "%c-%-4r %-5p [%d{yyyy-MM-dd HH:mm:ss}] %m%n"); - pro.put("log4j.appender.R", "org.apache.log4j.DailyRollingFileAppender"); - pro.put("log4j.appender.R.File", logPath); - pro.put("log4j.appender.R.DatePattern ", " '.'yyyy-MM-dd"); - pro.put("log4j.appender.R.layout", "org.apache.log4j.PatternLayout"); - pro.put("log4j.appender.R.layout.ConversionPattern", "%d{HH:mm:ss} %c{1} %-5p %m%n"); - pro.put("log4j.logger.org.atmosphere.cpr.AsynchronousProcessor", "FATAL"); - PropertyConfigurator.configure(pro); + private static void createLog4jConfig(File log4jFile, String logPath) throws FileNotFoundException, IOException { + + StringBuilder sb = new StringBuilder(); + + sb.append( + "log4j.rootLogger=info, stdout,R\n" + "log4j.appender.stdout=org.apache.log4j.ConsoleAppender\n" + "log4j.appender.stdout.layout=org.apache.log4j.PatternLayout \n" + + "log4j.appender.stdout.layout.ConversionPattern=%c-%-4r %-5p [%d{yyyy-MM-dd HH:mm:ss}] %m%n\n" + "\n" + + "log4j.appender.R=org.apache.log4j.DailyRollingFileAppender\n" + "log4j.appender.R.File="); + + sb.append(logPath); + + sb.append("\n" + "log4j.appender.R.DatePattern = '.'yyyy-MM-dd\n" + "log4j.appender.R.layout=org.apache.log4j.PatternLayout\n" + + "log4j.appender.R.layout.ConversionPattern=%d{HH:mm:ss} %c{1} %-5p %m%n\n" + "\n" + "## Disable other log \n" + + "log4j.logger.org.atmosphere.cpr.AsynchronousProcessor=FATAL"); + + wirteFile(log4jFile.getAbsolutePath(), "utf-8", sb.toString()); + } private static void parseFile(String file) throws UnsupportedEncodingException, FileNotFoundException, IOException { @@ -150,7 +152,7 @@ private static void parseFile(String file) throws UnsupportedEncodingException, } } - private static void makeFiles(File JcoderHome) throws FileNotFoundException, IOException { + private static void makeFiles(File JcoderHome, String logPath) throws FileNotFoundException, IOException { File libDir = new File(JcoderHome, "lib"); // create jar dir if (!libDir.exists()) { libDir.mkdirs(); @@ -178,6 +180,8 @@ private static void makeFiles(File JcoderHome) throws FileNotFoundException, IOE if (!resourceDir.exists()) { resourceDir.mkdirs(); } + + createLog4jConfig(new File(resourceDir, "log4j.properties"), logPath); } private static String getOrCreateEnv(String key, String def) { diff --git a/src/main/java/org/nlpcn/jcoder/filter/JcoderFilter.java b/src/main/java/org/nlpcn/jcoder/filter/JcoderFilter.java index 4e1a7e1..c236cf4 100644 --- a/src/main/java/org/nlpcn/jcoder/filter/JcoderFilter.java +++ b/src/main/java/org/nlpcn/jcoder/filter/JcoderFilter.java @@ -11,7 +11,9 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.nlpcn.commons.lang.util.StringUtil; import org.nlpcn.jcoder.run.mvc.ApiActionHandler; +import org.nlpcn.jcoder.run.mvc.view.JsonView; import org.nlpcn.jcoder.util.StaticValue; import org.nutz.lang.Strings; import org.nutz.lang.util.Context; @@ -22,9 +24,14 @@ public class JcoderFilter extends NutFilter { private ApiActionHandler apiHandler; + private String host; + + private static final byte[] AUTH_ERR = "no right to call this server".getBytes(); + public void init(FilterConfig conf) throws ServletException { super.init(conf); apiHandler = new ApiActionHandler(conf); + host = StaticValue.HOST; } @Override @@ -36,7 +43,28 @@ public void doFilter(final ServletRequest req, final ServletResponse resp, final if (path.startsWith("/api/")) { _doFilter(chain, request, response); } else { - super.doFilter(request, response, chain); + if (host == null) { + super.doFilter(request, response, chain); + } else if (host.equals(request.getServerName())) { + super.doFilter(request, response, chain); + } else { + _doAuthoErr(response); + } + } + } + + private void _doAuthoErr(HttpServletResponse response) throws IOException { + try { + response.setStatus(403); + response.setHeader("Cache-Control", "no-cache"); + response.setContentType("text/html"); + response.setContentLength(AUTH_ERR.length); + response.getOutputStream().write(AUTH_ERR); + } catch (Exception e) { + e.printStackTrace(); + } finally { + response.getOutputStream().flush(); + response.getOutputStream().close(); } } @@ -90,5 +118,5 @@ private void _doFilter(final FilterChain chain, HttpServletRequest request, Http public ApiActionHandler getApiHandler() { return apiHandler; } - + } diff --git a/src/main/java/org/nlpcn/jcoder/run/mvc/view/JsonView.java b/src/main/java/org/nlpcn/jcoder/run/mvc/view/JsonView.java index 71cb4db..118509b 100644 --- a/src/main/java/org/nlpcn/jcoder/run/mvc/view/JsonView.java +++ b/src/main/java/org/nlpcn/jcoder/run/mvc/view/JsonView.java @@ -1,14 +1,13 @@ package org.nlpcn.jcoder.run.mvc.view; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + import org.nlpcn.jcoder.util.ApiException; -import org.nutz.mvc.Mvcs; import org.nutz.mvc.View; import com.alibaba.fastjson.JSONObject; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - /** * 直接返回正文 * diff --git a/src/test/java/org/nlpcn/jcoder/run/java/ApiTest.java b/src/test/java/org/nlpcn/jcoder/run/java/ApiTest.java index 4e36118..34a89b9 100644 --- a/src/test/java/org/nlpcn/jcoder/run/java/ApiTest.java +++ b/src/test/java/org/nlpcn/jcoder/run/java/ApiTest.java @@ -1,53 +1,22 @@ package org.nlpcn.jcoder.run.java; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - import org.apache.log4j.Logger; -import org.nlpcn.jcoder.domain.User; import org.nlpcn.jcoder.run.annotation.DefaultExecute; -import org.nlpcn.jcoder.run.annotation.Execute; import org.nlpcn.jcoder.util.StaticValue; import org.nutz.ioc.loader.annotation.Inject; -import org.nutz.mvc.annotation.Param; +import org.nutz.mvc.Mvcs; public class ApiTest { @Inject private Logger log; - @Inject - private User user; - - @Execute - public String wangchao(String name) { - log.info("jetty hello wangchao !" + name); - - return "jetty hello wangchao !" + name; - } - - @Execute - public String test(@Param("name") String name, String bbb) throws InterruptedException { - log.info("execute----------------aaa----------"); - Thread.sleep(100000L); - return "execute : " + user.getName() + " " + name + "\t" + bbb; - } - @DefaultExecute public String defaultTest() throws InterruptedException { - Thread.sleep(100000L); - return "default : " + user.getName(); - } - - public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { - - ApiTest tr = new ApiTest(); - Method method = tr.getClass().getDeclaredMethod("test", String.class); - - Object invoke = method.invoke(tr, new Object[] { null }); - - System.out.println(invoke); + log.info(Mvcs.getReq().getServerName().matches("127.0.*")); + + return StaticValue.OK; } + }