NutzCN Logo
问答 shiro登录成功以后,不能跳转主页面
发布于 2573天前 作者 qq_cdeebfe2 2532 次浏览 复制 上一个帖子 下一个帖子
标签:

登录成功以后,window.location.href = "${nutz}/platform/login/home"; 跳转方法,如果方法体声明如下就可以进入方法体
@At("/home")
@Filters(@By(type = PlatformAuthenticationFilter.class))
public void home() {
System.out.println();
}
声明为下面的就不能进入方法体,是什么原因?
@At("/home")
@RequiresAuthentication
public void home() {
System.out.println();
}

60 回复

是的,写上了也进入不了方法体里面

我现在也没有对登录那块的代码看的太明白,是不是登录成功以后,直接跳转到index页面将菜单的权限信息展示出来就好了?

是shiro就没登录成功吧??

我也怀疑是,但我跟踪代码是登录成功了啊,难道什么地方还需要特殊配置或者处理吗

如何登录的? 贴代码看看

/**
	 * 登陆验证
	 *
	 * @param token
	 * @param req
	 * @return
	 */
	@At("/doLogin")
	@Ok("json")
	@Filters(@By(type = PlatformAuthenticationFilter.class))
	public Object doLogin(@Attr("loginToken") AuthenticationToken token, HttpServletRequest req, HttpSession session) {
		int errCount = 0;
		try {
			//输错三次显示验证码窗口
			errCount = NumberUtils.toInt(Strings.sNull(SecurityUtils.getSubject().getSession(true).getAttribute("errCount")));
			Subject subject = SecurityUtils.getSubject();
			ThreadContext.bind(subject);
			subject.login(token);
			User user = (User) subject.getPrincipal();
			int count = user.getLoginCount() == null ? 0 : user.getLoginCount();
			userService.update(Chain.make("loginIp", user.getLoginIp()).add("loginAt", System.currentTimeMillis())
							.add("loginCount", count + 1).add("isOnline", true)
					, Cnd.where("id", "=", user.getId()));
			Sys_log sysLog = new Sys_log();
			sysLog.setType("info");
			sysLog.setTag("用户登陆");
			sysLog.setSrc(this.getClass().getName()+"#doLogin");
			sysLog.setMsg("成功登录系统!");
			sysLog.setIp(StringUtil.getRemoteAddr());
			sysLog.setOpBy(user.getId());
			sysLog.setOpAt((int) (System.currentTimeMillis() / 1000));
			sysLog.setUsername(user.getUsername());
			sLogService.async(sysLog);
			return Result.success("login.success");
		} catch (CaptchaIncorrectException e) {
			//自定义的验证码错误异常
			return Result.error(1, "login.error.captcha");
		} catch (CaptchaEmptyException e) {
			//验证码为空
			return Result.error(2, "login.error.captcha");
		} catch (LockedAccountException e) {
			return Result.error(3, "login.error.locked");
		} catch (UnknownAccountException e) {
			errCount++;
			SecurityUtils.getSubject().getSession(true).setAttribute("errCount", errCount);
			return Result.error(4, "login.error.user");
		} catch (AuthenticationException e) {
			errCount++;
			SecurityUtils.getSubject().getSession(true).setAttribute("errCount", errCount);
			return Result.error(5, "login.error.user");
		} catch (Exception e) {
			errCount++;
			SecurityUtils.getSubject().getSession(true).setAttribute("errCount", errCount);
			return Result.error(6, "login.error.system");
		}
	}

登录用的就是nutzwk的登录代码,我看权限和菜单信息也都获取到了,

@At("/home")
 @RequiresAuthentication
 public void home() {
 System.out.println();
 }

访问这个URL的时候, 页面出啥???

前台代码也是一样的,返回的状态码也是0,window.location.href = "${ctx}/platform/login/homepage"; 只有这里我改成我自己的URL,不同是我的前台是用的JSP,

$(document).ready(function () {
        $("#year").html(new Date().getFullYear());
        $("#loginForm").ajaxForm({
            dataType: 'json',
            beforeSubmit: function (arr, form, options) {
                form.find("button:submit").text("${msg['login.load']}");
                form.find("button:submit").attr("disabled", "disabled");
            },
            success: function (data, statusText, xhr, form) {
                if (data.code == 0) {
                    $("#tip").hide();
                    form.find("button:submit").text("${msg['login.success']}");
                    window.location.href = "${ctx}/platform/login/homepage";
                } else if (data.code == 2) {
                    $("#verifycode").val("");
                    $("#dialogVeryCode img").attr("src", '${ctx}/platform/login/captcha?_=' + new Date().getTime());
                    return $("#dialogVeryCode").modal({show: true, backdrop: 'static', keyboard: false});
                } else {
                    $("#captcha").val("");
                    $('#captcha_img').attr('src', '${ctx}/platform/login/captcha?_=' + new Date().getTime());
                    $("#tip").html(data.msg);
                    $("#tip").fadeIn();
                    form.find("button:submit").text("${msg['login.submit']}");
                    form.find("button:submit").removeAttr("disabled")
                }
            }
        });
        $("#ok").on("click", function () {
            if ($("#verifycode").val() == "") {
                $("#f2").submit();
                return false;
            }
            $("#captcha").val($("#verifycode").val());
            $("#loginForm").submit();
        });
        $("#dialogVeryCode").on("keypress", function (event) {
            var key = event.which;
            if (key == 13) {
                $("#ok").trigger("click");
            }
        });
        $("#username").focus();
    });

前台代码也是一样的,返回的状态码也是0,window.location.href = "${ctx}/platform/login/homepage"; 只有这里我改成我自己的URL,不同是我的前台是用的JSP,

$(document).ready(function () {
        $("#year").html(new Date().getFullYear());
        $("#loginForm").ajaxForm({
            dataType: 'json',
            beforeSubmit: function (arr, form, options) {
                form.find("button:submit").text("${msg['login.load']}");
                form.find("button:submit").attr("disabled", "disabled");
            },
            success: function (data, statusText, xhr, form) {
                if (data.code == 0) {
                    $("#tip").hide();
                    form.find("button:submit").text("${msg['login.success']}");
                    window.location.href = "${ctx}/platform/login/homepage";
                } else if (data.code == 2) {
                    $("#verifycode").val("");
                    $("#dialogVeryCode img").attr("src", '${ctx}/platform/login/captcha?_=' + new Date().getTime());
                    return $("#dialogVeryCode").modal({show: true, backdrop: 'static', keyboard: false});
                } else {
                    $("#captcha").val("");
                    $('#captcha_img').attr('src', '${ctx}/platform/login/captcha?_=' + new Date().getTime());
                    $("#tip").html(data.msg);
                    $("#tip").fadeIn();
                    form.find("button:submit").text("${msg['login.submit']}");
                    form.find("button:submit").removeAttr("disabled")
                }
            }
        });
        $("#ok").on("click", function () {
            if ($("#verifycode").val() == "") {
                $("#f2").submit();
                return false;
            }
            $("#captcha").val($("#verifycode").val());
            $("#loginForm").submit();
        });
        $("#dialogVeryCode").on("keypress", function (event) {
            var key = event.which;
            if (key == 13) {
                $("#ok").trigger("click");
            }
        });
        $("#username").focus();
    });

那个页面的url就是想跳转到登录完成以后的主页面,就是现实用户的权限菜单信息

@wendal 大神帮忙,我搞了好长时间这个了,一直也没有搞定呢,进行不下去了

我问的是页面发生了什么,是没跳转到期望的url,还是跳转之后的页面有问题?

是没有跳转到期望的url

是不是根本没进success回调?

进去了 ,我在前台alert状态码返回的是0

这段js并不在jsp页面里面? 所以 ${ctx} 没渲染??

回调函数在jsp页面里面,应该是渲染了,如果我在方法体上声明@Filters(@By(type = PlatformAuthenticationFilter.class)) 这个就能进到方法体,如果声明@RequiresAuthentication 这个就进不了方法体

PlatformAuthenticationFilter的代码贴一下看看

import com.nutz.shrio.token.CaptchaToken;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;
import org.apache.shiro.web.util.WebUtils;
import org.nutz.mvc.ActionContext;
import org.nutz.mvc.ActionFilter;
import org.nutz.mvc.View;

import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;

/**
* Created by wizzer on 2017/1/10.
*/
public class PlatformAuthenticationFilter extends FormAuthenticationFilter implements ActionFilter {

private String captchaParam = "platformCaptcha";

public String getCaptchaParam() {
    return captchaParam;
}

protected String getCaptcha(ServletRequest request) {
    return WebUtils.getCleanParam(request, getCaptchaParam());
}

protected AuthenticationToken createToken(HttpServletRequest request) {
    String username = getUsername(request);
    String password = getPassword(request);
    String captcha = getCaptcha(request);
    boolean rememberMe = isRememberMe(request);
    String host = getHost(request);
    return new CaptchaToken(username, password, rememberMe, host, captcha);
}

public View match(ActionContext actionContext) {
    HttpServletRequest request = actionContext.getRequest();
    AuthenticationToken authenticationToken = createToken(request);
    request.setAttribute("loginToken", authenticationToken);
    return null;
}

}

```

这个就是原来的代码,没有改动直接搬过来的

这代码就没判断是否已经登录...

话说, 既然已经code=0, 那么 window.location.href = "${ctx}/platform/login/homepage"; 肯定执行了吧?

那浏览器的路径肯定跳转到 /xxx//platform/login/homepage 了? 难道没有吗??

是的,所以那样就可以跳转到url里面 ,方法声明为@RequiresAuthentication 验证用户是否登录的时候就进不去方法体了 ,那还是用户没有真正的登录码?

他还是在登录页面,并没有跳转

后台日志发一下

 |        1 |
    |----------|
    | admin |
  For example:> "SELECT * FROM (SELECT T.*, ROWNUM RN FROM ( SELECT * FROM sys_user  WHERE loginname='admin') T WHERE ROWNUM <= 1) WHERE RN > 0 "
DEBUG 16:50:46 NutDaoExecutor.printSQL(388)-->SELECT * FROM sys_role  WHERE id IN (SELECT roleId FROM sys_user_role WHERE userId='2eef3704c47b4b97a7e026b98cd442d6')
DEBUG 16:50:46 NutDaoExecutor.printSQL(388)-->SELECT * FROM sys_unit  WHERE id IN (SELECT unitId FROM sys_user_unit WHERE userId='2eef3704c47b4b97a7e026b98cd442d6')
DEBUG 16:50:46 NutDaoExecutor.printSQL(388)-->SELECT * FROM sys_unit  WHERE id IS NULL 
DEBUG 16:50:46 NutDaoExecutor.printSQL(388)-->select distinct a.* from sys_menu a,sys_role_menu b where a.id=b.menuId and  b.roleId in(select c.roleId from sys_user_role c,sys_role d where c.roleId=d.id and c.userId=? and d.disabled='0') and a.disabled='0' and a.isShow='1' and a.type='menu' order by a.location ASC,a.path asc
    |                                1 |
    |----------------------------------|
    | 2eef3704c47b4b97a7e026b98cd442d6 |
  For example:> "select distinct a.* from sys_menu a,sys_role_menu b where a.id=b.menuId and  b.roleId in(select c.roleId from sys_user_role c,sys_role d where c.roleId=d.id and c.userId='2eef3704c47b4b97a7e026b98cd442d6' and d.disabled='0') and a.disabled='0' and a.isShow='1' and a.type='menu' order by a.location ASC,a.path asc"
DEBUG 16:50:46 NutDaoExecutor.printSQL(388)-->UPDATE sys_user SET loginIp=?,loginAt=?,loginCount=?,isOnline=?  WHERE id=?
    |    1 |             2 |  3 |    4 |                                5 |
    |------|---------------|----|------|----------------------------------|
    | NULL | 1498467046414 | 60 | true | 2eef3704c47b4b97a7e026b98cd442d6 |
  For example:> "UPDATE sys_user SET loginIp='NULL',loginAt=1498467046414,loginCount=60,isOnline=true  WHERE id='2eef3704c47b4b97a7e026b98cd442d6'"
DEBUG 16:50:46 UrlMappingImpl.get(101)-->Found mapping for [GET] path=/platform/login/homepage : LoginAt.homepage(LoginAt.java:181)
DEBUG 16:50:46 NutIoc.get(151)-->Get 'shiroUtil'<class com.nutz.util.ShiroUtil>
DEBUG 16:50:46 NutIoc.get(151)-->Get 'dateUtil'<class com.nutz.util.DateUtil>
DEBUG 16:50:46 NutIoc.get(151)-->Get 'loginAt'<class com.nutz.LoginAt>
DEBUG 16:50:50 NutDaoExecutor.printSQL(388)-->INSERT INTO sys_log(username,type,tag,src,ip,msg,opBy,opAt,delFlag) VALUES(?,?,?,?,?,?,?,?,?) 
    |     1 |    2 |    3 |                           4 |               5 |       6 |                                7 |          8 |    9 |
    |-------|------|------|-----------------------------|-----------------|---------|----------------------------------|------------|------|
    | 管理员 | info | 用户登陆 | com.nutz.LoginAt#doLogin | 0:0:0:0:0:0:0:1 | 成功登录系统! | 2eef3704c47b4b97a7e026b98cd442d6 | 1498467046 | NULL |
  For example:> "INSERT INTO sys_log(username,type,tag,src,ip,msg,opBy,opAt,delFlag) VALUES('管理员','info','用户登陆','com.wonders.LoginAt#doLogin','0:0:0:0:0:0:0:1','成功登录系统!','2eef3704c47b4b97a7e026b98cd442d6',1498467046,'NULL') "

登录页面就是 /platform/login/homepage , 那还跳转到/platform/login/homepage 干毛线???

登录页面不是/platform/login/homepage 这个,登录页面是index.jsp

/platform/login/homepage 对应的入口方法是 LoginAt.homepage(LoginAt.java:181) 并非你最初贴的home方法

嗯 ,我以为是home有冲突或者关键词什么的 ,后来我就在后面加了个page

debug一下NutShiroProcessor的process方法吧

登录成功跳转到process,
match的值是true,执行 interceptor.assertAuthorized(new NutShiroInterceptor(ac)); 是对的吗?
public void process(ActionContext ac) throws Throwable {
if (match) {
try {
interceptor.assertAuthorized(new NutShiroInterceptor(ac));
} catch (Exception e) {
whenException(ac, e);
return;
}
}
doNext(ac);
}

有没有抛出异常? 是否catch了异常, 如果没catch, 应该能进入入口方法的

没有抛异常~说明shiro登录成功了~但就是进不去入口方法

那么, 用的是shiro插件吗?shiro插件是最新的吗? 有无把shiro插件的代码拷贝进项目了?

不好意思,shiro插架指的是哪些?

例如NutShiroInterceptor和NutShiroProccssor类

这些代码都是完全照nutzwk照搬过来,应该没有问题

启动日志发一下.

话说, 为啥搬nutzwk呢? 直接用nutzwk不就好了?

D:\apache-tomcat-8.5.8\bin\catalina.bat run
[2017-06-27 08:51:27,181] Artifact nutz:war exploded: Server is not connected. Deploy is not available.
Using CATALINA_BASE:   "C:\Users\Administrator\.IntelliJIdea2017.1\system\tomcat\Unnamed_nutz_2"
Using CATALINA_HOME:   "D:\apache-tomcat-8.5.8"
Using CATALINA_TMPDIR: "D:\apache-tomcat-8.5.8\temp"
Using JRE_HOME:        "C:\java\jdk1.8.0_25"
Using CLASSPATH:       "D:\apache-tomcat-8.5.8\bin\bootstrap.jar;D:\apache-tomcat-8.5.8\bin\tomcat-juli.jar"
Connected to the target VM, address: '127.0.0.1:51309', transport: 'socket'
27-Jun-2017 08:51:29.543 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.5.8
27-Jun-2017 08:51:29.575 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Nov 3 2016 21:14:13 UTC
27-Jun-2017 08:51:29.576 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:         8.5.8.0
27-Jun-2017 08:51:29.576 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Windows 8.1
27-Jun-2017 08:51:29.576 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            6.3
27-Jun-2017 08:51:29.576 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
27-Jun-2017 08:51:29.576 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             C:\java\jdk1.8.0_25\jre
27-Jun-2017 08:51:29.576 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           1.8.0_25-b18
27-Jun-2017 08:51:29.576 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
27-Jun-2017 08:51:29.576 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         C:\Users\Administrator\.IntelliJIdea2017.1\system\tomcat\Unnamed_nutz_2
27-Jun-2017 08:51:29.577 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         D:\apache-tomcat-8.5.8
27-Jun-2017 08:51:29.577 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:51309,suspend=y,server=n
27-Jun-2017 08:51:29.577 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dfile.encoding=UTF-8
27-Jun-2017 08:51:29.577 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote=
27-Jun-2017 08:51:29.577 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.port=1099
27-Jun-2017 08:51:29.578 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.ssl=false
27-Jun-2017 08:51:29.578 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.authenticate=false
27-Jun-2017 08:51:29.578 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.rmi.server.hostname=127.0.0.1
27-Jun-2017 08:51:29.578 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
27-Jun-2017 08:51:29.578 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
27-Jun-2017 08:51:29.578 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=C:\Users\Administrator\.IntelliJIdea2017.1\system\tomcat\Unnamed_nutz_2\conf\logging.properties
27-Jun-2017 08:51:29.579 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
27-Jun-2017 08:51:29.579 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=C:\Users\Administrator\.IntelliJIdea2017.1\system\tomcat\Unnamed_nutz_2
27-Jun-2017 08:51:29.579 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=D:\apache-tomcat-8.5.8
27-Jun-2017 08:51:29.579 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=D:\apache-tomcat-8.5.8\temp
27-Jun-2017 08:51:29.579 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded APR based Apache Tomcat Native library 1.2.10 using APR version 1.5.2.
27-Jun-2017 08:51:29.579 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
27-Jun-2017 08:51:29.579 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
27-Jun-2017 08:51:30.629 信息 [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized (OpenSSL 1.0.2j  26 Sep 2016)
27-Jun-2017 08:51:31.399 信息 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
27-Jun-2017 08:51:31.606 信息 [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
27-Jun-2017 08:51:31.622 信息 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]
27-Jun-2017 08:51:31.638 信息 [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
27-Jun-2017 08:51:31.639 信息 [main] org.apache.catalina.startup.Catalina.load Initialization processed in 3007 ms
27-Jun-2017 08:51:31.830 信息 [main] org.apache.catalina.core.StandardService.startInternal Starting service Catalina
27-Jun-2017 08:51:31.830 信息 [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.8
27-Jun-2017 08:51:31.846 信息 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [http-nio-8080]
27-Jun-2017 08:51:31.869 信息 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [ajp-nio-8009]
27-Jun-2017 08:51:31.875 信息 [main] org.apache.catalina.startup.Catalina.start Server startup in 235 ms
Connected to server
[2017-06-27 08:51:32,303] Artifact nutz:war exploded: Artifact is being deployed, please wait...
27-Jun-2017 08:51:41.866 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory D:\apache-tomcat-8.5.8\webapps\manager
27-Jun-2017 08:51:42.765 信息 [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
27-Jun-2017 08:51:42.951 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory D:\apache-tomcat-8.5.8\webapps\manager has finished in 1,084 ms
27-Jun-2017 08:51:46.676 信息 [RMI TCP Connection(2)-127.0.0.1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
log4j:WARN No appenders could be found for logger (org.apache.commons.beanutils.converters.BooleanConverter).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
INFO 08:51:48 NutFilter._init(85)-->NutFilter[nutz] starting ...
DEBUG 08:51:48 Scans.printLocations(521)-->Locations count=4 time use 8ms
DEBUG 08:51:48 Scans.printLocations(521)-->Locations count=64 time use 56ms
DEBUG 08:51:48 Castors.reload(115)-->Using 95 castor for Castors
DEBUG 08:51:48 AbstractNutConfig.createLoading(59)-->Loading by class org.nutz.mvc.impl.NutLoading
INFO 08:51:48 NutLoading.load(55)-->Nutz Version : 1.r.61-SNAPSHOT 
INFO 08:51:48 NutLoading.load(56)-->Nutz.Mvc[nutz] is initializing ...
DEBUG 08:51:48 NutLoading.load(60)-->Web Container Information:
DEBUG 08:51:48 NutLoading.load(61)--> - Default Charset : UTF-8
DEBUG 08:51:48 NutLoading.load(62)--> - Current . path  : D:\apache-tomcat-8.5.8\bin\.
DEBUG 08:51:48 NutLoading.load(63)--> - Java Version    : 1.8.0_25
DEBUG 08:51:48 NutLoading.load(64)--> - File separator  : \
DEBUG 08:51:48 NutLoading.load(65)--> - Timezone        : Asia/Shanghai
DEBUG 08:51:48 NutLoading.load(66)--> - OS              : Windows 8.1 amd64
DEBUG 08:51:48 NutLoading.load(67)--> - ServerInfo      : Apache Tomcat/8.5.8
DEBUG 08:51:48 NutLoading.load(68)--> - Servlet API     : 3.1
DEBUG 08:51:48 NutLoading.load(73)--> - ContextPath     : 
DEBUG 08:51:48 NutLoading.load(74)--> - context.tempdir : C:\Users\Administrator\.IntelliJIdea2017.1\system\tomcat\Unnamed_nutz_2\work\Catalina\localhost\ROOT
DEBUG 08:51:48 NutLoading.load(75)--> - MainModule      : com.nutz.MainModule
DEBUG 08:51:48 NutLoading.createContext(235)-->>> app.root = E:/nutz_module/nutz/target/nutz
DEBUG 08:51:48 NutLoading.createIoc(376)-->@IocBy(type=org.nutz.mvc.ioc.provider.ComboIocProvider, args=["*org.nutz.ioc.loader.json.JsonLoader", "ioc/", "*org.nutz.ioc.loader.annotation.AnnotationIocLoader", "com.nutz"],init=[])
DEBUG 08:51:48 Scans.scan(274)-->Found 3 resource by src( ioc/ ) , regex( ^(.+[.])(js|json)$ )
DEBUG 08:51:48 JsonLoader.<init>(49)-->loading [aop.js]
DEBUG 08:51:48 JsonLoader.<init>(49)-->loading [dao.js]
DEBUG 08:51:48 JsonLoader.<init>(49)-->loading [ehcache.json]
DEBUG 08:51:48 JsonLoader.<init>(57)-->Loaded 13 bean define from path=[ioc/] --> [log, txNONE, cacheManager, $aop, txREPEATABLE_READ, dao, uploadFileContext, txREAD_UNCOMMITTED, myUpload, txREAD_COMMITTED, tmpFilePool, txSERIALIZABLE, dataSource]
DEBUG 08:51:49 Scans.scan(274)-->Found 386 resource by src( com/nutz/ ) , regex( ^.+[.]class$ )
DEBUG 08:51:49 AnnotationIocLoader.addClass(74)-->Found @IocBean : class com.nutz.homeAt
DEBUG 08:51:49 AnnotationIocLoader.addClass(74)-->Found @IocBean : class com.nutz.LoginAt
DEBUG 08:51:49 AnnotationIocLoader.addClass(74)-->Found @IocBean : class com.nutz.shrio.interceptor.NutShiroMethodInterceptor
DEBUG 08:51:49 AnnotationIocLoader.addClass(74)-->Found @IocBean : class com.nutz.shrio.realm.PlatformAuthorizingRealm
DEBUG 08:51:49 AnnotationIocLoader.addClass(74)-->Found @IocBean : class com.nutz.site.DownLoadOfficeAt
DEBUG 08:51:49 AnnotationIocLoader.addClass(74)-->Found @IocBean : class com.nutz.slog.SLogService
DEBUG 08:51:49 AnnotationIocLoader.addClass(74)-->Found @IocBean : class com.nutz.tdsc.corp.CorpInfoAt
DEBUG 08:51:49 AnnotationIocLoader.addClass(74)-->Found @IocBean : class com.nutz.tiles.authority.service.impl.SysApiServiceImpl
DEBUG 08:51:49 AnnotationIocLoader.addClass(74)-->Found @IocBean : class com.nutz.tiles.authority.service.impl.SysMenuServiceImpl
DEBUG 08:51:49 AnnotationIocLoader.addClass(74)-->Found @IocBean : class com.nutz.tiles.authority.service.impl.SysRoleServiceImpl
DEBUG 08:51:49 AnnotationIocLoader.addClass(74)-->Found @IocBean : class com.nutz.tiles.authority.service.impl.SysUserServiceImpl
DEBUG 08:51:49 AnnotationIocLoader.addClass(74)-->Found @IocBean : class com.nutz.util.DateUtil
DEBUG 08:51:49 AnnotationIocLoader.addClass(74)-->Found @IocBean : class com.nutz.util.ShiroUtil
INFO 08:51:49 AnnotationIocLoader.<init>(50)-->Found 120 classes in 1 base-packages!
INFO 08:51:49 NutIoc.<init>(98)-->NutIoc init begin ...
INFO 08:51:49 NutIoc.<init>(115)-->... NutIoc init complete
INFO 08:51:49 NutLoading.evalUrlMapping(159)-->Build URL mapping by org.nutz.mvc.impl.UrlMappingImpl ...
DEBUG 08:51:49 NutLoading.createViewMakers(366)-->@Views(BeetlViewMaker.class,PdfViewMaker.class,DefaultViewMaker.class)
DEBUG 08:51:49 Scans.scan(274)-->Found 1 resource by src( chain/nutzwk-mvc-chain.json ) , regex( ^(.+[.])(js|json)$ )
DEBUG 08:51:49 JsonActionChainMakerConfiguretion.<init>(37)-->ActionChain Config:
{
   "default": {
      "ps": ["com.nutz.commons.processor.LogTimeProcessor", "com.nutz.commons.processor.GlobalsSettingProcessor", "org.nutz.mvc.impl.processor.UpdateRequestAttributesProcessor", "org.nutz.mvc.impl.processor.EncodingProcessor", "org.nutz.mvc.impl.processor.ModuleProcessor", "com.nutz.commons.processor.NutShiroProcessor", "com.nutz.commons.processor.XssSqlFilterProcessor", "org.nutz.mvc.impl.processor.ActionFiltersProcessor", "org.nutz.mvc.impl.processor.AdaptorProcessor", "org.nutz.mvc.impl.processor.MethodInvokeProcessor", "org.nutz.mvc.impl.processor.ViewProcessor"],
      "error": "org.nutz.mvc.impl.processor.FailProcessor"
   }
}
DEBUG 08:51:49 NutLoading.createChainMaker(263)-->@ChainBy(org.nutz.mvc.impl.NutActionChainMaker)
DEBUG 08:51:49 Loadings.scanModules(154)-->module class location 'file:/E:/nutz_module/nutz/target/nutz/WEB-INF/classes/'
DEBUG 08:51:49 Loadings.scanModuleInPackage(184)--> > scan 'com.nutz'
DEBUG 08:51:49 Scans.scan(274)-->Found 386 resource by src( com/nutz/ ) , regex( ^.+[.]class$ )
DEBUG 08:51:49 Loadings.checkModule(199)-->   >> add 'com.nutz.homeAt'
DEBUG 08:51:49 Loadings.checkModule(199)-->   >> add 'com.nutz.LoginAt
DEBUG 08:51:50 NutIoc.get(151)-->Get 'errView'<interface org.nutz.mvc.View>
DEBUG 08:51:50 NutIoc.get(151)-->Get '$aop'<interface org.nutz.ioc.aop.config.AopConfigration>
DEBUG 08:51:50 NutIoc.get(177)-->	 >> Load definition name=$aop
DEBUG 08:51:50 MapLoader.load(67)-->Loading define for name=$aop
DEBUG 08:51:50 ComboIocLoader.load(161)-->Found IocObject($aop) in JsonLoader(paths=[ioc/])
DEBUG 08:51:50 NutIoc.get(209)-->	 >> Make...'$aop'<interface org.nutz.ioc.aop.config.AopConfigration>
DEBUG 08:51:50 ScopeContext.save(64)-->Save object '$aop' to [app] 
DEBUG 08:51:50 SimpleAopMaker.<init>(79)-->Load AopConfigure for anno=org.nutz.ioc.aop.Aop by type=org.nutz.ioc.aop.config.impl.AnnotationAopConfigration
DEBUG 08:51:50 NutIoc.get(177)-->	 >> Load definition name=errView
DEBUG 08:51:50 ComboIocLoader.load(161)-->Found IocObject(errView) in AnnotationIocLoader(packages=[com.nutz])
DEBUG 08:51:50 NutIoc.get(209)-->	 >> Make...'errView'<interface org.nutz.mvc.View>
DEBUG 08:51:50 NutIoc.get(151)-->Get 'txSERIALIZABLE'<interface org.nutz.aop.MethodInterceptor>
DEBUG 08:51:50 NutIoc.get(177)-->	 >> Load definition name=txSERIALIZABLE
DEBUG 08:51:50 MapLoader.load(67)-->Loading define for name=txSERIALIZABLE
DEBUG 08:51:50 ComboIocLoader.load(161)-->Found IocObject(txSERIALIZABLE) in JsonLoader(paths=[ioc/])
DEBUG 08:51:50 NutIoc.get(209)-->	 >> Make...'txSERIALIZABLE'<interface org.nutz.aop.MethodInterceptor>
DEBUG 08:51:50 ScopeContext.save(64)-->Save object 'txSERIALIZABLE' to [app] 
DEBUG 08:51:50 NutIoc.get(151)-->Get 'txREAD_COMMITTED'<interface org.nutz.aop.MethodInterceptor>
DEBUG 08:51:50 NutIoc.get(177)-->	 >> Load definition name=txREAD_COMMITTED
DEBUG 08:51:50 MapLoader.load(67)-->Loading define for name=txREAD_COMMITTED
DEBUG 08:51:50 ComboIocLoader.load(161)-->Found IocObject(txREAD_COMMITTED) in JsonLoader(paths=[ioc/])
DEBUG 08:51:50 NutIoc.get(209)-->	 >> Make...'txREAD_COMMITTED'<interface org.nutz.aop.MethodInterceptor>
DEBUG 08:51:50 ScopeContext.save(64)-->Save object 'txREAD_COMMITTED' to [app] 
DEBUG 08:51:50 AsmClassAgent.<clinit>(29)-->AsmClassAgent will define class in Version 50
DEBUG 08:51:50 ScopeContext.save(64)-->Save object 'errView' to [app] 
DEBUG 08:51:50 NutIoc.get(151)-->Get 'myUpload'<class org.nutz.mvc.upload.UploadAdaptor>
DEBUG 08:51:50 NutIoc.get(177)-->	 >> Load definition name=myUpload
DEBUG 08:51:50 MapLoader.load(67)-->Loading define for name=myUpload
DEBUG 08:51:50 ComboIocLoader.load(161)-->Found IocObject(myUpload) in JsonLoader(paths=[ioc/])
DEBUG 08:51:50 NutIoc.get(209)-->	 >> Make...'myUpload'<class org.nutz.mvc.upload.UploadAdaptor>
DEBUG 08:51:50 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadAdaptor without AOP
DEBUG 08:51:50 NutIoc.get(151)-->Get 'uploadFileContext'<>
DEBUG 08:51:50 NutIoc.get(177)-->	 >> Load definition name=uploadFileContext
DEBUG 08:51:50 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:51:50 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:51:50 NutIoc.get(209)-->	 >> Make...'uploadFileContext'<>
DEBUG 08:51:50 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadingContext without AOP
DEBUG 08:51:50 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:50 NutIoc.get(177)-->	 >> Load definition name=tmpFilePool
DEBUG 08:51:50 MapLoader.load(67)-->Loading define for name=tmpFilePool
DEBUG 08:51:50 ComboIocLoader.load(161)-->Found IocObject(tmpFilePool) in JsonLoader(paths=[ioc/])
DEBUG 08:51:50 NutIoc.get(209)-->	 >> Make...'tmpFilePool'<>
DEBUG 08:51:50 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.filepool.NutFilePool without AOP
DEBUG 08:51:50 ScopeContext.save(64)-->Save object 'tmpFilePool' to [app] 
INFO 08:51:50 NutFilePool.<init>(23)-->Init file-pool by: ~/nutz/blog/upload/tmps [1000]
DEBUG 08:51:51 NutFilePool.<init>(37)-->file-pool.home: 'C:\Users\Administrator\nutz\blog\upload\tmps'
INFO 08:51:51 NutFilePool.<init>(66)-->file-pool.cursor: 96
DEBUG 08:51:51 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:51 NutIoc.get(151)-->Get 'uploadFileContext'<>
DEBUG 08:51:51 NutIoc.get(177)-->	 >> Load definition name=uploadFileContext
DEBUG 08:51:51 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:51:51 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:51:51 NutIoc.get(209)-->	 >> Make...'uploadFileContext'<>
DEBUG 08:51:51 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadingContext without AOP
DEBUG 08:51:51 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:51 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:51 NutIoc.get(151)-->Get 'errView'<interface org.nutz.mvc.View>
DEBUG 08:51:51 NutIoc.get(151)-->Get 'myUpload'<class org.nutz.mvc.upload.UploadAdaptor>
DEBUG 08:51:51 NutIoc.get(177)-->	 >> Load definition name=myUpload
DEBUG 08:51:51 MapLoader.load(67)-->Loading define for name=myUpload
DEBUG 08:51:51 ComboIocLoader.load(161)-->Found IocObject(myUpload) in JsonLoader(paths=[ioc/])
DEBUG 08:51:51 NutIoc.get(209)-->	 >> Make...'myUpload'<class org.nutz.mvc.upload.UploadAdaptor>
DEBUG 08:51:51 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadAdaptor without AOP
DEBUG 08:51:51 NutIoc.get(151)-->Get 'uploadFileContext'<>
DEBUG 08:51:51 NutIoc.get(177)-->	 >> Load definition name=uploadFileContext
DEBUG 08:51:51 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:51:51 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:51:51 NutIoc.get(209)-->	 >> Make...'uploadFileContext'<>
DEBUG 08:51:51 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadingContext without AOP
DEBUG 08:51:51 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:51 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:51 NutIoc.get(151)-->Get 'uploadFileContext'<>
DEBUG 08:51:51 NutIoc.get(177)-->	 >> Load definition name=uploadFileContext
DEBUG 08:51:51 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:51:51 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:51:51 NutIoc.get(209)-->	 >> Make...'uploadFileContext'<>
DEBUG 08:51:51 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadingContext without AOP
DEBUG 08:51:51 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:51 NutIoc.get(151)-->Get 'myUpload'<class org.nutz.mvc.upload.UploadAdaptor>
DEBUG 08:51:51 NutIoc.get(177)-->	 >> Load definition name=myUpload
DEBUG 08:51:51 MapLoader.load(67)-->Loading define for name=myUpload
DEBUG 08:51:51 ComboIocLoader.load(161)-->Found IocObject(myUpload) in JsonLoader(paths=[ioc/])
DEBUG 08:51:51 NutIoc.get(209)-->	 >> Make...'myUpload'<class org.nutz.mvc.upload.UploadAdaptor>
DEBUG 08:51:51 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadAdaptor without AOP
DEBUG 08:51:51 NutIoc.get(151)-->Get 'uploadFileContext'<>
DEBUG 08:51:51 NutIoc.get(177)-->	 >> Load definition name=uploadFileContext
DEBUG 08:51:51 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:51:51 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:51:51 NutIoc.get(209)-->	 >> Make...'uploadFileContext'<>
DEBUG 08:51:51 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadingContext without AOP
DEBUG 08:51:51 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:51 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:51 NutIoc.get(151)-->Get 'uploadFileContext'<>
DEBUG 08:51:51 NutIoc.get(177)-->	 >> Load definition name=uploadFileContext
DEBUG 08:51:51 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:51:51 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:51:51 NutIoc.get(209)-->	 >> Make...'uploadFileContext'<>
DEBUG 08:51:51 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadingContext without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'myUpload'<class org.nutz.mvc.upload.UploadAdaptor>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=myUpload
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=myUpload
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(myUpload) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'myUpload'<class org.nutz.mvc.upload.UploadAdaptor>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadAdaptor without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'uploadFileContext'<>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=uploadFileContext
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'uploadFileContext'<>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadingContext without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'uploadFileContext'<>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=uploadFileContext
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'uploadFileContext'<>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadingContext without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'errView'<interface org.nutz.mvc.View>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'errView'<interface org.nutz.mvc.View>
DEBUG 08:51:52 UrlMappingImpl.print(146)-->   '/research/info/supplementlist' >> (ResearchInfoAt.java:400).supplementList : Map        | @Ok(jsp:jsp.researchinfo.meeting.supplement) @Fail(ioc:errView) | by 1 Filters | (I:UTF-8/O:UTF-8)
DEBUG 08:51:52 NutIoc.get(151)-->Get 'myUpload'<class org.nutz.mvc.upload.UploadAdaptor>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=myUpload
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=myUpload
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(myUpload) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'myUpload'<class org.nutz.mvc.upload.UploadAdaptor>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadAdaptor without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'uploadFileContext'<>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=uploadFileContext
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'uploadFileContext'<>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadingContext without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'uploadFileContext'<>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=uploadFileContext
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'uploadFileContext'<>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadingContext without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'errView'<interface org.nutz.mvc.View>
DEBUG 08:51:52 UrlMappingImpl.print(146)-->   '/research/info/supplementsave' >> (ResearchInfoAt.java:412).supplementSave : Map        | @Ok(json ) @Fail(ioc:errView) | by 1 Filters | (I:UTF-8/O:UTF-8)
DEBUG 08:51:52 NutIoc.get(151)-->Get 'myUpload'<class org.nutz.mvc.upload.UploadAdaptor>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=myUpload
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=myUpload
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(myUpload) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'myUpload'<class org.nutz.mvc.upload.UploadAdaptor>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadAdaptor without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'uploadFileContext'<>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=uploadFileContext
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'uploadFileContext'<>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadingContext without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'uploadFileContext'<>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=uploadFileContext
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'uploadFileContext'<>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadingContext without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
           
DEBUG 08:51:52 NutIoc.get(151)-->Get 'myUpload'<class org.nutz.mvc.upload.UploadAdaptor>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=myUpload
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=myUpload
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(myUpload) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'myUpload'<class org.nutz.mvc.upload.UploadAdaptor>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadAdaptor without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'uploadFileContext'<>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=uploadFileContext
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'uploadFileContext'<>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadingContext without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'uploadFileContext'<>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=uploadFileContext
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'uploadFileContext'<>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadingContext without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'errView'<interface org.nutz.mvc.View>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'myUpload'<class org.nutz.mvc.upload.UploadAdaptor>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=myUpload
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=myUpload
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(myUpload) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'myUpload'<class org.nutz.mvc.upload.UploadAdaptor>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadAdaptor without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'uploadFileContext'<>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=uploadFileContext
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'uploadFileContext'<>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadingContext without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'uploadFileContext'<>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=uploadFileContext
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'uploadFileContext'<>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadingContext without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'errView'<interface org.nutz.mvc.View>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'myUpload'<class org.nutz.mvc.upload.UploadAdaptor>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=myUpload
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=myUpload
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(myUpload) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'myUpload'<class org.nutz.mvc.upload.UploadAdaptor>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadAdaptor without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'uploadFileContext'<>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=uploadFileContext
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'uploadFileContext'<>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadingContext without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'uploadFileContext'<>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=uploadFileContext
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'uploadFileContext'<>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadingContext without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'errView'<interface org.nutz.mvc.View>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'myUpload'<class org.nutz.mvc.upload.UploadAdaptor>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=myUpload
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=myUpload
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(myUpload) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'myUpload'<class org.nutz.mvc.upload.UploadAdaptor>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadAdaptor without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'uploadFileContext'<>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=uploadFileContext
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'uploadFileContext'<>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadingContext without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'uploadFileContext'<>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=uploadFileContext
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'uploadFileContext'<>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.mvc.upload.UploadingContext without AOP
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'tmpFilePool'<>
DEBUG 08:51:52 NutIoc.get(151)-->Get 'errView'<interface org.nutz.mvc.View>
DEBUG 08:51:52 Scans.scan(274)-->Found 0 resource by src( locales/ ) , regex( ^.+[.]properties$ )
DEBUG 08:51:52 NutMessageLoader.load(27)-->Load Messages in 0 resource : [[]]
DEBUG 08:51:52 NutMessageLoader.load(95)-->Message Loaded, size = 0
INFO 08:51:52 NutLoading.createSessionProvider(410)-->SessionBy --> com.nutz.shrio.session.ShiroSessionProvider@18df8435
INFO 08:51:52 NutLoading.evalSetup(271)-->Setup application...
DEBUG 08:51:52 NutIoc.get(151)-->Get 'dao'<interface org.nutz.dao.Dao>
DEBUG 08:51:52 NutIoc.get(177)-->	 >> Load definition name=dao
DEBUG 08:51:52 MapLoader.load(67)-->Loading define for name=dao
DEBUG 08:51:52 ComboIocLoader.load(161)-->Found IocObject(dao) in JsonLoader(paths=[ioc/])
DEBUG 08:51:52 NutIoc.get(209)-->	 >> Make...'dao'<interface org.nutz.dao.Dao>
DEBUG 08:51:52 DefaultMirrorFactory.getMirror(70)-->Load class org.nutz.dao.impl.NutDao without AOP
DEBUG 08:51:52 ScopeContext.save(64)-->Save object 'dao' to [app] 
DEBUG 08:51:53 NutIoc.get(151)-->Get 'dataSource'<>
DEBUG 08:51:53 NutIoc.get(177)-->	 >> Load definition name=dataSource
DEBUG 08:51:53 MapLoader.load(67)-->Loading define for name=dataSource
DEBUG 08:51:53 ComboIocLoader.load(161)-->Found IocObject(dataSource) in JsonLoader(paths=[ioc/])
DEBUG 08:51:53 NutIoc.get(209)-->	 >> Make...'dataSource'<>
DEBUG 08:51:53 DefaultMirrorFactory.getMirror(70)-->Load class com.alibaba.druid.pool.DruidDataSource without AOP
DEBUG 08:51:53 ScopeContext.save(64)-->Save object 'dataSource' to [app] 
INFO 08:51:55 NutFilePool.<init>(23)-->Init file-pool by: C:\Users\Administrator/.nutz/tmp/dao/ [200000]
DEBUG 08:51:55 NutFilePool.<init>(37)-->file-pool.home: 'C:\Users\Administrator\.nutz\tmp\dao'
INFO 08:51:55 NutFilePool.<init>(66)-->file-pool.cursor: 0
DEBUG 08:51:55 Jdbcs.<clinit>(90)-->Jdbcs init complete
INFO 08:51:55 Jdbcs.getExpert(103)-->Get Connection from DataSource for JdbcExpert, if you lock at here, check your database server and configure
DEBUG 08:51:55 DaoSupport.setDataSource(189)-->select expert : org.nutz.dao.impl.jdbc.oracle.OracleJdbcExpert
DEBUG 08:51:55 DaoSupport$1.invoke(200)-->JDBC Driver --> 12.1.0.2.0
DEBUG 08:51:55 DaoSupport$1.invoke(201)-->JDBC Name   --> Oracle JDBC driver
DEBUG 08:51:55 DaoSupport$1.invoke(203)-->JDBC URL    --> jdbc:oracle:thin:@127.0.0.1:1522:orcl
DEBUG 08:51:55 DaoSupport.setDataSource(222)-->Database info --> ORACLE:[Oracle - Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options]
DEBUG 08:51:55 NutDaoExecutor.printSQL(388)-->SELECT * FROM sys_config 
DEBUG 08:51:55 NutDaoExecutor.printSQL(388)-->SELECT COUNT(*) FROM sys_route 
DEBUG 08:51:55 NutDaoExecutor.printSQL(388)-->SELECT * FROM sys_route  WHERE disabled=?
    |     1 |
    |-------|
    | false |
  For example:> "SELECT * FROM sys_route  WHERE disabled=false"
DEBUG 08:51:55 NutIoc.get(151)-->Get 'cacheManager'<class net.sf.ehcache.CacheManager>
DEBUG 08:51:55 NutIoc.get(177)-->	 >> Load definition name=cacheManager
DEBUG 08:51:55 MapLoader.load(67)-->Loading define for name=cacheManager
DEBUG 08:51:55 ComboIocLoader.load(161)-->Found IocObject(cacheManager) in JsonLoader(paths=[ioc/])
DEBUG 08:51:55 NutIoc.get(209)-->	 >> Make...'cacheManager'<class net.sf.ehcache.CacheManager>
DEBUG 08:51:55 DefaultMirrorFactory.getMirror(70)-->Load class net.sf.ehcache.CacheManager without AOP
DEBUG 08:51:55 ScopeContext.save(64)-->Save object 'cacheManager' to [app] 
INFO 08:51:55 Setup.init(66)-->
 _  _ _   _ _____ ______      ___  __
| \| | | | |_   _|_  /\ \    / / |/ /
| .` | |_| | | |  / /  \ \/\/ /| ' < 
|_|\_|\___/  |_| /___|  \_/\_/ |_|\_\
INFO 08:51:55 NutLoading.load(141)-->Nutz.Mvc[nutz] is up in 7219ms
INFO 08:51:55 NutFilter._init(117)-->exclusionsPrefix  = ^(/assets/|/druid/|/upload/|/apidoc/)
[2017-06-27 08:51:55,941] Artifact nutz:war exploded: Artifact is deployed successfully
[2017-06-27 08:51:55,942] Artifact nutz:war exploded: Deploy took 23,639 milliseconds
DEBUG 08:52:22 UrlMappingImpl.get(101)-->Found mapping for [POST] path=/platform/login/doLogin : LoginAt.doLogin(LoginAt.java:132)
DEBUG 08:52:22 NutIoc.get(151)-->Get 'shiroUtil'<class com.nutz.util.ShiroUtil>
DEBUG 08:52:22 NutIoc.get(177)-->	 >> Load definition name=shiroUtil
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(shiroUtil) in AnnotationIocLoader(packages=[com.nutz])
DEBUG 08:52:22 NutIoc.get(209)-->	 >> Make...'shiroUtil'<class com.nutz.util.ShiroUtil>
DEBUG 08:52:22 NutIoc.get(151)-->Get 'txSERIALIZABLE'<interface org.nutz.aop.MethodInterceptor>
DEBUG 08:52:22 NutIoc.get(151)-->Get 'txREAD_COMMITTED'<interface org.nutz.aop.MethodInterceptor>
DEBUG 08:52:22 ScopeContext.save(64)-->Save object 'shiroUtil' to [app] 
DEBUG 08:52:22 NutIoc.get(151)-->Get 'dateUtil'<class com.nutz.util.DateUtil>
DEBUG 08:52:22 NutIoc.get(177)-->	 >> Load definition name=dateUtil
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(dateUtil) in AnnotationIocLoader(packages=[com.nutz])
DEBUG 08:52:22 NutIoc.get(209)-->	 >> Make...'dateUtil'<class com.nutz.util.DateUtil>
DEBUG 08:52:22 NutIoc.get(151)-->Get 'txSERIALIZABLE'<interface org.nutz.aop.MethodInterceptor>
DEBUG 08:52:22 NutIoc.get(151)-->Get 'txREAD_COMMITTED'<interface org.nutz.aop.MethodInterceptor>
DEBUG 08:52:22 ScopeContext.save(64)-->Save object 'dateUtil' to [app] 
DEBUG 08:52:22 NutIoc.get(151)-->Get 'loginAt'<class com.nutz.LoginAt>
DEBUG 08:52:22 NutIoc.get(177)-->	 >> Load definition name=loginAt
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(loginAt) in AnnotationIocLoader(packages=[com.nutz])
DEBUG 08:52:22 NutIoc.get(209)-->	 >> Make...'loginAt'<class com.nutz.LoginAt>
DEBUG 08:52:22 NutIoc.get(151)-->Get 'txSERIALIZABLE'<interface org.nutz.aop.MethodInterceptor>
DEBUG 08:52:22 NutIoc.get(151)-->Get 'txREAD_COMMITTED'<interface org.nutz.aop.MethodInterceptor>
DEBUG 08:52:22 ScopeContext.save(64)-->Save object 'loginAt' to [app] 
DEBUG 08:52:22 ReferTypeValue.get(64)-->name=userService not found, search for type=com.nutz.tiles.authority.service.SysUserService
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=log
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(log) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=txNONE
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(txNONE) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=cacheManager
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(cacheManager) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=$aop
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject($aop) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=txREPEATABLE_READ
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(txREPEATABLE_READ) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=dao
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(dao) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=txREAD_UNCOMMITTED
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(txREAD_UNCOMMITTED) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=myUpload
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(myUpload) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=txREAD_COMMITTED
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(txREAD_COMMITTED) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=tmpFilePool
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(tmpFilePool) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=txSERIALIZABLE
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(txSERIALIZABLE) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=dataSource
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(dataSource) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(contractRevokedAt) in AnnotationIocLoader(packages=[com.nutz])
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(bankInfoAt) in AnnotationIocLoader(packages=[com.nutz])
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(sysUserServiceImpl) in AnnotationIocLoader(packages=[com.nutz])
DEBUG 08:52:22 NutIoc.get(151)-->Get 'sysUserServiceImpl'<interface com.nutz.tiles.authority.service.SysUserService>
DEBUG 08:52:22 NutIoc.get(177)-->	 >> Load definition name=sysUserServiceImpl
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(sysUserServiceImpl) in AnnotationIocLoader(packages=[com.nutz])
DEBUG 08:52:22 NutIoc.get(209)-->	 >> Make...'sysUserServiceImpl'<interface com.nutz.tiles.authority.service.SysUserService>
DEBUG 08:52:22 NutIoc.get(151)-->Get 'txSERIALIZABLE'<interface org.nutz.aop.MethodInterceptor>
DEBUG 08:52:22 NutIoc.get(151)-->Get 'txREAD_COMMITTED'<interface org.nutz.aop.MethodInterceptor>
DEBUG 08:52:22 NutIoc.get(151)-->Get 'txREAD_COMMITTED'<interface org.nutz.aop.MethodInterceptor>
DEBUG 08:52:22 NutIoc.get(151)-->Get 'txREAD_COMMITTED'<interface org.nutz.aop.MethodInterceptor>
DEBUG 08:52:22 ScopeContext.save(64)-->Save object 'sysUserServiceImpl' to [app] 
DEBUG 08:52:22 NutIoc.get(151)-->Get 'dao'<>
DEBUG 08:52:22 NutIoc.get(151)-->Get 'dao'<>
DEBUG 08:52:22 EntityService.<init>(41)-->Get TypeParams for self : com.nutz.tiles.authority.entity.User
DEBUG 08:52:22 ReferTypeValue.get(64)-->name=sysMenuService not found, search for type=com.nutz.tiles.authority.service.SysMenuService
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=log
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(log) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=txNONE
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(txNONE) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=cacheManager
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(cacheManager) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=$aop
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject($aop) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=txREPEATABLE_READ
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(txREPEATABLE_READ) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=dao
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(dao) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=uploadFileContext
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(uploadFileContext) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=txREAD_UNCOMMITTED
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(txREAD_UNCOMMITTED) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=myUpload
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(myUpload) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=txREAD_COMMITTED
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(txREAD_COMMITTED) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=tmpFilePool
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(tmpFilePool) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=txSERIALIZABLE
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(txSERIALIZABLE) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 MapLoader.load(67)-->Loading define for name=dataSource
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(dataSource) in JsonLoader(paths=[ioc/])
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(sysRoleServiceImpl) in AnnotationIocLoader(packages=[com.nutz])
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(systemService) in AnnotationIocLoader(packages=[com.nutz])
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(homeAt) in AnnotationIocLoader(packages=[com.nutz])
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(sysMenuServiceImpl) in AnnotationIocLoader(packages=[com.nutz])
DEBUG 08:52:22 NutIoc.get(151)-->Get 'sysMenuServiceImpl'<interface com.nutz.tiles.authority.service.SysMenuService>
DEBUG 08:52:22 NutIoc.get(177)-->	 >> Load definition name=sysMenuServiceImpl
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(sysMenuServiceImpl) in AnnotationIocLoader(packages=[com.nutz])
DEBUG 08:52:22 NutIoc.get(209)-->	 >> Make...'sysMenuServiceImpl'<interface com.nutz.tiles.authority.service.SysMenuService>
DEBUG 08:52:22 NutIoc.get(151)-->Get 'txSERIALIZABLE'<interface org.nutz.aop.MethodInterceptor>
DEBUG 08:52:22 NutIoc.get(151)-->Get 'txREAD_COMMITTED'<interface org.nutz.aop.MethodInterceptor>
DEBUG 08:52:22 NutIoc.get(151)-->Get 'txREAD_COMMITTED'<interface org.nutz.aop.MethodInterceptor>
DEBUG 08:52:22 NutIoc.get(151)-->Get 'txREAD_COMMITTED'<interface org.nutz.aop.MethodInterceptor>
DEBUG 08:52:22 ScopeContext.save(64)-->Save object 'sysMenuServiceImpl' to [app] 
DEBUG 08:52:22 NutIoc.get(151)-->Get 'dao'<>
DEBUG 08:52:22 NutIoc.get(151)-->Get 'dao'<>
DEBUG 08:52:22 EntityService.<init>(41)-->Get TypeParams for self : com.nutz.tiles.authority.entity.Authority
DEBUG 08:52:22 NutIoc.get(151)-->Get 'sLogService'<class com.nutz.slog.SLogService>
DEBUG 08:52:22 NutIoc.get(177)-->	 >> Load definition name=sLogService
DEBUG 08:52:22 ComboIocLoader.load(161)-->Found IocObject(sLogService) in AnnotationIocLoader(packages=[com.nutz])
DEBUG 08:52:22 NutIoc.get(209)-->	 >> Make...'sLogService'<class com.nutz.slog.SLogService>
DEBUG 08:52:22 NutIoc.get(151)-->Get 'txSERIALIZABLE'<interface org.nutz.aop.MethodInterceptor>
DEBUG 08:52:22 NutIoc.get(151)-->Get 'txREAD_COMMITTED'<interface org.nutz.aop.MethodInterceptor>
DEBUG 08:52:22 ScopeContext.save(64)-->Save object 'sLogService' to [app] 
DEBUG 08:52:22 NutIoc.get(151)-->Get 'dao'<interface org.nutz.dao.Dao>
DEBUG 08:52:27 NutIoc.get(151)-->Get 'sysUserServiceImpl'<class com.nutz.tiles.authority.service.impl.SysUserServiceImpl>
DEBUG 08:52:27 NutDaoExecutor.printSQL(388)-->SELECT * FROM (SELECT T.*, ROWNUM RN FROM ( SELECT * FROM sys_user  WHERE loginname=?) T WHERE ROWNUM <= 1) WHERE RN > 0 
    |        1 |
    |----------|
    | tj_admin |
  For example:> "SELECT * FROM (SELECT T.*, ROWNUM RN FROM ( SELECT * FROM sys_user  WHERE loginname='tj_admin') T WHERE ROWNUM <= 1) WHERE RN > 0 "
DEBUG 08:52:27 NutDaoExecutor.printSQL(388)-->SELECT * FROM sys_role  WHERE id IN (SELECT roleId FROM sys_user_role WHERE userId='2eef3704c47b4b97a7e026b98cd442d6')
DEBUG 08:52:27 NutDaoExecutor.printSQL(388)-->SELECT * FROM sys_unit  WHERE id IN (SELECT unitId FROM sys_user_unit WHERE userId='2eef3704c47b4b97a7e026b98cd442d6')
DEBUG 08:52:27 NutDaoExecutor.printSQL(388)-->SELECT * FROM sys_unit  WHERE id IS NULL 
DEBUG 08:52:27 NutDaoExecutor.printSQL(388)-->select distinct a.* from sys_menu a,sys_role_menu b where a.id=b.menuId and  b.roleId in(select c.roleId from sys_user_role c,sys_role d where c.roleId=d.id and c.userId=? and d.disabled='0') and a.disabled='0' and a.isShow='1' and a.type='menu' order by a.location ASC,a.path asc
    |                                1 |
    |----------------------------------|
    | 2eef3704c47b4b97a7e026b98cd442d6 |
  For example:> "select distinct a.* from sys_menu a,sys_role_menu b where a.id=b.menuId and  b.roleId in(select c.roleId from sys_user_role c,sys_role d where c.roleId=d.id and c.userId='2eef3704c47b4b97a7e026b98cd442d6' and d.disabled='0') and a.disabled='0' and a.isShow='1' and a.type='menu' order by a.location ASC,a.path asc"
DEBUG 08:52:27 NutDaoExecutor.printSQL(388)-->UPDATE sys_user SET loginIp=?,loginAt=?,loginCount=?,isOnline=?  WHERE id=?
    |    1 |             2 |  3 |    4 |                                5 |
    |------|---------------|----|------|----------------------------------|
    | NULL | 1498524747510 | 69 | true | 2eef3704c47b4b97a7e026b98cd442d6 |
  For example:> "UPDATE sys_user SET loginIp='NULL',loginAt=1498524747510,loginCount=69,isOnline=true  WHERE id='2eef3704c47b4b97a7e026b98cd442d6'"
DEBUG 08:52:28 NutDaoExecutor.printSQL(388)-->INSERT INTO sys_log(username,type,tag,src,ip,msg,opBy,opAt,delFlag) VALUES(?,?,?,?,?,?,?,?,?) 
    |     1 |    2 |    3 |                           4 |               5 |       6 |                                7 |          8 |    9 |
    |-------|------|------|-----------------------------|-----------------|---------|----------------------------------|------------|------|
    | 管理员 | info | 用户登陆 | com.nutz.LoginAt#doLogin | 0:0:0:0:0:0:0:1 | 成功登录系统! | 2eef3704c47b4b97a7e026b98cd442d6 | 1498524747 | NULL |
  For example:> "INSERT INTO sys_log(username,type,tag,src,ip,msg,opBy,opAt,delFlag) VALUES('管理员','info','用户登陆','com.nutz.LoginAt#doLogin','0:0:0:0:0:0:0:1','成功登录系统!','2eef3704c47b4b97a7e026b98cd442d6',1498524747,'NULL') "
DEBUG 08:52:28 UrlMappingImpl.get(101)-->Found mapping for [GET] path=/platform/login/homepage : LoginAt.homepage(LoginAt.java:181)
DEBUG 08:52:28 NutIoc.get(151)-->Get 'shiroUtil'<class com.nutz.util.ShiroUtil>
DEBUG 08:52:28 NutIoc.get(151)-->Get 'dateUtil'<class com.nutz.util.DateUtil>
DEBUG 08:52:28 NutIoc.get(151)-->Get 'loginAt'<class com.nutz.LoginAt>

登录完成后, 浏览器的URL变成了啥?


现在是变成http://localhost:8080/index.jsp

所以是访问 /platform/login/homepage 然后 302 到 /index.jsp 了?

不是,我在homepge打断点根本就没有进这个方法

方法这么写没有问题吧?

@IocBean // 声明为Ioc容器中的一个Bean
@At("/platform/login") // 整个模块的路径前缀
@Ok("json:{locked:'password|createAt',ignoreNull:true}") // 忽略password和createAt属性,忽略空属性的json输出
public class LoginAt {
	private static final Log log = Logs.get();
	@Inject
	private SysUserService userService;
	@Inject
	private SLogService sLogService;

	/**
	 * 登陆验证
	 *
	 * @param token
	 * @param req
	 * @return
	 */
	@At("/doLogin")
	@Ok("json")
	@Filters(@By(type = PlatformAuthenticationFilter.class))
	public Object doLogin(@Attr("loginToken") AuthenticationToken token, HttpServletRequest req, HttpSession session) {
		int errCount = 0;
		try {
			//输错三次显示验证码窗口
			errCount = NumberUtils.toInt(Strings.sNull(SecurityUtils.getSubject().getSession(true).getAttribute("errCount")));
			Subject subject = SecurityUtils.getSubject();
			ThreadContext.bind(subject);
			subject.login(token);
			User user = (User) subject.getPrincipal();
			int count = user.getLoginCount() == null ? 0 : user.getLoginCount();
			userService.update(Chain.make("loginIp", user.getLoginIp()).add("loginAt", System.currentTimeMillis())
							.add("loginCount", count + 1).add("isOnline", true)
					, Cnd.where("id", "=", user.getId()));
			Sys_log sysLog = new Sys_log();
			sysLog.setType("info");
			sysLog.setTag("用户登陆");
			sysLog.setSrc(this.getClass().getName()+"#doLogin");
			sysLog.setMsg("成功登录系统!");
			sysLog.setIp(StringUtil.getRemoteAddr());
			sysLog.setOpBy(user.getId());
			sysLog.setOpAt((int) (System.currentTimeMillis() / 1000));
			sysLog.setUsername(user.getUsername());
			sLogService.async(sysLog);
			return Result.success("login.success");
		} catch (CaptchaIncorrectException e) {
			//自定义的验证码错误异常
			return Result.error(1, "login.error.captcha");
		} catch (CaptchaEmptyException e) {
			//验证码为空
			return Result.error(2, "login.error.captcha");
		} catch (LockedAccountException e) {
			return Result.error(3, "login.error.locked");
		} catch (UnknownAccountException e) {
			errCount++;
			SecurityUtils.getSubject().getSession(true).setAttribute("errCount", errCount);
			return Result.error(4, "login.error.user");
		} catch (AuthenticationException e) {
			errCount++;
			SecurityUtils.getSubject().getSession(true).setAttribute("errCount", errCount);
			return Result.error(5, "login.error.user");
		} catch (Exception e) {
			errCount++;
			SecurityUtils.getSubject().getSession(true).setAttribute("errCount", errCount);
			return Result.error(6, "login.error.system");
		}
	}
	@At("/homepage")
	@RequiresAuthentication
	@Ok("json")
	public void homepage() {
		System.out.println();
	}
	}

homepage方法除了@Ok不对之外, 没啥问题.

改成下面的代码, 看看显示啥, 不加@RequiresAuthentication

@At("/homepage")
@Ok("raw")
@Fail("http:500")
public Object homepage() {
    return SecurityUtils.getSubject().isAuthenticated();
}

换成这段代码以后,登录我debug process()方法 ,match返回false,url还是跟以前一样,没有变化

还是进不到homepage方法体里面

再加一个@Filters() 看看变化

加上@Filters() 就可以跳转过去,并且界面上返回了一个true

ok, 那看来是你在MainModule上加了一个Filters. 恢复回去吧, 在最初的代码上加上@Filters()就好了

是的,确实是在MainModule上加了一个Filters,但是我还是不明白这其中的道理,在哪里有讲解这方面的东西的?

@wendal 不好意思 ,还有个问题,就是在前台我可以用下面这种方式直接取到数据吗?

 <ul class="nav" id="side-menu">
                    
                    <c:forEach items="${shiro.getPrincipalProperty('firstMenus')}" var="menu" >

                    <li>
                        <a href="#">
                            <i class="fa fa-circle-thin"></i>
                            <span class="nav-label">${firstMenu.name}</span>
                            <span class="fa arrow"></span>
                        </a>
                      
                    </li>

		</c:forEach>

                </ul>

变量名是menu吧

${menu.name}

是的 ,我在页面上改过来了,但是还是没有现实数据

显示出来了,是我页面js报错了,谢谢

添加回复
请先登陆
回到顶部