一月 09, 2018 11:04:54 上午 org.apache.catalina.core.AprLifecycleListener init
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\WeX5_V3.7\java\jre1.8\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;D:/WeX5_V3.7/studio//../java/jre1.8/bin/client;D:/WeX5_V3.7/studio//../java/jre1.8/bin;D:/WeX5_V3.7/studio//../java/jre1.8/lib/i386;C:\Windows;C:\Windows\System32;E:\Oracle\product\12.2.0\dbhome_1\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Microsoft SQL Server\80\Tools\Binn\;C:\Program Files\Microsoft SQL Server\90\DTS\Binn\;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files (x86)\Microsoft SQL Server\90\Tools\binn\;C:\Program Files (x86)\Microsoft SQL Server\90\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\;C:\Program Files\Git\cmd;C:\Program Files\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev0\mingw64\bin;C:\Users\liuyc\Anaconda2\Library\bin\graphviz;C:\Users\liuyc\AppData\Local\Microsoft\WindowsApps;;D:\WeX5_V3.7\studio;;.
一月 09, 2018 11:04:54 上午 org.apache.coyote.http11.Http11Protocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
一月 09, 2018 11:04:54 上午 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 338 ms
一月 09, 2018 11:04:54 上午 org.apache.catalina.core.StandardService start
信息: Starting service Catalina
一月 09, 2018 11:04:54 上午 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/6.0.41
一月 09, 2018 11:04:54 上午 org.apache.catalina.startup.HostConfig deployDescriptor
信息: Deploying configuration descriptor baas.xml
一月 09, 2018 11:04:54 上午 org.apache.catalina.loader.WebappClassLoader validateJarFile
信息: validateJarFile(D:\WeX5_V3.7\apache-tomcat\webapps\..\..\runtime\BaasServer\WEB-INF\lib\servlet-api.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
一月 09, 2018 11:04:54 上午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Shiro environment
[main] INFO org.apache.shiro.web.env.EnvironmentLoader - Starting Shiro environment initialization.
[main] INFO org.apache.shiro.config.ReflectionBuilder - An instance with name 'authc' already exists. Redefining this object as a new instance of type org.nutz.integration.shiro.SimpleAuthenticationFilter
[main] INFO org.apache.shiro.web.env.EnvironmentLoader - Shiro environment initialized in 301 ms.
log4j:ERROR Could not find value for key log4j.appender.INFO
log4j:ERROR Could not instantiate appender named "INFO".
2018-01-09 11:04:55 NutFilter[nutz] starting ...
2018-01-09 11:04:55 Locations count=4 time use 9ms
2018-01-09 11:04:55 Locations count=61 time use 38ms
2018-01-09 11:04:55 Loading by class org.nutz.mvc.impl.NutLoading
2018-01-09 11:04:55 Nutz Version : 1.r.63-20171115
2018-01-09 11:04:55 Nutz.Mvc[nutz] is initializing ...
2018-01-09 11:04:55 Web Container Information:
2018-01-09 11:04:55 - Default Charset : GBK
2018-01-09 11:04:55 - Current . path : D:\WeX5_V3.7\studio\.
2018-01-09 11:04:55 - Java Version : 1.8.0_73
2018-01-09 11:04:55 - File separator : \
2018-01-09 11:04:55 - Timezone : Asia/Shanghai
2018-01-09 11:04:55 - OS : Windows 10 x86
2018-01-09 11:04:55 - ServerInfo : Apache Tomcat/6.0.41
2018-01-09 11:04:55 - Servlet API : 2.5
2018-01-09 11:04:55 - ContextPath : /baas
2018-01-09 11:04:55 - context.tempdir : D:\WeX5_V3.7\apache-tomcat\work\Catalina\localhost\baas
2018-01-09 11:04:55 - MainModule : com.naxxm.MainModule
2018-01-09 11:04:55 >> app.root = D:/WeX5_V3.7/apache-tomcat/webapps/../../runtime/BaasServer
2018-01-09 11:04:55 Using 95 castor for Castors
2018-01-09 11:04:55 @IocBy(type=org.nutz.mvc.ioc.provider.ComboIocProvider, args=["*js", "ioc/", "*async", "*tx", "*anno", "com.naxxm"],init=[])
2018-01-09 11:04:55 Found 2 resource by src( ioc/ ) , regex( ^(.+[.])(js|json)$ )
2018-01-09 11:04:55 loading [conf.js]
2018-01-09 11:04:55 loading [dao.js]
2018-01-09 11:04:55 Loaded 3 bean define from path=[ioc/] --> [dataSource, conf, dao]
2018-01-09 11:04:55 Load AopConfigure for anno=org.nutz.aop.interceptor.async.Async by type=org.nutz.aop.interceptor.async.AsyncAopIocLoader
2018-01-09 11:04:55 Loaded 5 bean define from reader --
[txREPEATABLE_READ, txSERIALIZABLE, txNONE, txREAD_UNCOMMITTED, txREAD_COMMITTED]
2018-01-09 11:04:55 Found 24 resource by src( com/naxxm/ ) , regex( ^.+[.]class$ )
2018-01-09 11:04:55 Found @IocBean : class com.naxxm.action.GoodsAction
2018-01-09 11:04:55 Found @IocBean : class com.naxxm.action.OrderAction
2018-01-09 11:04:55 Found @IocBean : class com.naxxm.modules.login.LoginAction
2018-01-09 11:04:55 Found @IocBean : class com.naxxm.service.FoodService
2018-01-09 11:04:55 Found @IocBean : class com.naxxm.shiro.handlers.ShiroHandler
2018-01-09 11:04:55 Found 5 classes in 1 base-packages!
beans = ["goodsAction", "foodService", "loginAction", "shiroHandler", "orderAction"]
2018-01-09 11:04:55 NutIoc init begin ...
2018-01-09 11:04:55 ... NutIoc init complete
2018-01-09 11:04:55 Build URL mapping by org.nutz.mvc.impl.UrlMappingImpl ...
2018-01-09 11:04:55 @Views(DefaultViewMaker.class)
2018-01-09 11:04:55 @ChainBy(org.nutz.mvc.impl.NutActionChainMaker)
2018-01-09 11:04:55 > scan 'com.naxxm'
2018-01-09 11:04:55 Found 24 resource by src( com/naxxm/ ) , regex( ^.+[.]class$ )
2018-01-09 11:04:55 >> add 'com.naxxm.action.GoodsAction'
2018-01-09 11:04:55 >> add 'com.naxxm.action.OrderAction'
2018-01-09 11:04:55 >> add 'com.naxxm.modules.login.LoginAction'
2018-01-09 11:04:55 >> add 'com.naxxm.shiro.handlers.ShiroHandler'
2018-01-09 11:04:55 module class location 'file:/D:/WeX5_V3.7/runtime/BaasServer/WEB-INF/classes/com/naxxm/MainModule.class'
2018-01-09 11:04:55 > scan 'com.naxxm'
2018-01-09 11:04:55 Found 24 resource by src( com/naxxm/ ) , regex( ^.+[.]class$ )
2018-01-09 11:04:55 >> add 'com.naxxm.action.GoodsAction'
2018-01-09 11:04:55 >> add 'com.naxxm.action.OrderAction'
2018-01-09 11:04:55 >> add 'com.naxxm.modules.login.LoginAction'
2018-01-09 11:04:55 >> add 'com.naxxm.shiro.handlers.ShiroHandler'
2018-01-09 11:04:55 Use org.nutz.mvc.impl.NutEntryDeterminer as EntryMethodDeterminer
2018-01-09 11:04:55 Optional processor class not found, disabled : org.nutz.plugins.validation.ValidationProcessor
2018-01-09 11:04:55 '/naxxm/javabean/goods/queryAction' >> (GoodsAction.java:72).query : JSONObject | @Ok(json ) @Fail(raw ) | by 0 Filters | (I:UTF-8/O:UTF-8)
2018-01-09 11:04:55 '/naxxm/javabean/goods/save' >> (GoodsAction.java:138).saveAction : void | @Ok(json ) @Fail(raw ) | by 0 Filters | (I:UTF-8/O:UTF-8)
2018-01-09 11:04:55 '/naxxm/javabean/goods/queryClassAction' >> (GoodsAction.java:48).queryclass : JSONObject | @Ok(json ) @Fail(raw ) | by 0 Filters | (I:UTF-8/O:UTF-8)
2018-01-09 11:04:55 '/naxxm/javabean/goods/queryVIPAction' >> (GoodsAction.java:105).queryVIP : JSONObject | @Ok(json ) @Fail(raw ) | by 0 Filters | (I:UTF-8/O:UTF-8)
2018-01-09 11:04:55 '/naxxm/login/loginAction' >> (LoginAction.java:34).login : JSONObject | @Ok(json ) @Fail(raw ) | by 0 Filters | (I:UTF-8/O:UTF-8)
2018-01-09 11:04:55 '/ecoolper/order/queryAction' >> (OrderAction.java:38).query : JSONObject | @Ok(json ) @Fail(raw ) | by 0 Filters | (I:UTF-8/O:UTF-8)
2018-01-09 11:04:55 '/ecoolper/order/saveAction' >> (OrderAction.java:70).saveAction : void | @Ok(raw ) @Fail(raw ) | by 0 Filters | (I:UTF-8/O:UTF-8)
2018-01-09 11:04:55 Duplicate @At mapping ? path=/naxxm/login/loginAction
2018-01-09 11:04:55 '/naxxm/login/loginAction' >> (ShiroHandler.java:41).login : JSONObject | @Ok(json ) @Fail(raw ) | by 0 Filters | (I:UTF-8/O:UTF-8)
2018-01-09 11:04:55 Found 8 module methods
2018-01-09 11:04:55 @Localization not define
2018-01-09 11:04:55 SessionBy --> org.nutz.integration.shiro.ShiroSessionProvider@1b759d6
2018-01-09 11:04:55 Setup application...
2018-01-09 11:04:55 Get 'dao'<interface org.nutz.dao.Dao>
2018-01-09 11:04:55 Get '$aop_async'<interface org.nutz.ioc.aop.config.AopConfigration>
2018-01-09 11:04:55 >> Load definition name=$aop_async
2018-01-09 11:04:55 Found IocObject($aop_async) in AsyncAopIocLoader@32299666
2018-01-09 11:04:55 >> Make...'$aop_async'<interface org.nutz.ioc.aop.config.AopConfigration>
2018-01-09 11:04:55 Save object '$aop_async' to [app]
2018-01-09 11:04:55 Load AopConfigure for anno=org.nutz.ioc.aop.Aop by type=org.nutz.ioc.aop.config.impl.AnnotationAopConfigration
2018-01-09 11:04:55 >> Load definition name=dao
2018-01-09 11:04:55 Loading define for name=dao
2018-01-09 11:04:55 Found IocObject(dao) in JsonLoader(paths=[ioc/])
2018-01-09 11:04:55 >> Make...'dao'<interface org.nutz.dao.Dao>
2018-01-09 11:04:55 Save object 'dao' to [app]
2018-01-09 11:04:55 Get 'dataSource'<>
2018-01-09 11:04:55 >> Load definition name=dataSource
2018-01-09 11:04:55 Loading define for name=dataSource
2018-01-09 11:04:55 Found IocObject(dataSource) in JsonLoader(paths=[ioc/])
2018-01-09 11:04:55 >> Make...'dataSource'<>
2018-01-09 11:04:55 Save object 'dataSource' to [app]
2018-01-09 11:04:55 Load class com.alibaba.druid.pool.DruidDataSource without AOP
2018-01-09 11:04:55 {dataSource-1} inited
2018-01-09 11:04:55 Load class org.nutz.dao.impl.NutDao without AOP
2018-01-09 11:04:55 Get 'dataSource'<>
2018-01-09 11:04:55 Jdbcs init complete
2018-01-09 11:04:55 Get Connection from DataSource for JdbcExpert, if you lock at here, check your database server and configure
2018-01-09 11:04:55 select expert : org.nutz.dao.impl.jdbc.sqlserver2005.Sqlserver2005JdbcExpert
2018-01-09 11:04:55 JDBC Driver --> 1.2
2018-01-09 11:04:55 JDBC Name --> jTDS Type 4 JDBC Driver for MS SQL Server and Sybase
2018-01-09 11:04:55 JDBC URL --> jdbc:jtds:sqlserver://127.0.0.1:1433/testdb_sys
2018-01-09 11:04:55 Database info --> SQLSERVER:[Microsoft SQL Server - 09.00.5000]
2018-01-09 11:04:55 Found 24 resource by src( com/naxxm/ ) , regex( ^.+[.]class$ )
2018-01-09 11:04:55 SELECT COUNT(*) FROM t_sys_employee
2018-01-09 11:04:55 Nutz.Mvc[nutz] is up in 728ms
log4j:ERROR Could not find value for key log4j.appender.INFO
log4j:ERROR Could not instantiate appender named "INFO".
一月 09, 2018 11:04:55 上午 org.apache.catalina.startup.HostConfig deployDescriptor
信息: Deploying configuration descriptor host-manager.xml
一月 09, 2018 11:04:55 上午 org.apache.catalina.startup.HostConfig deployDescriptor
信息: Deploying configuration descriptor manager.xml
一月 09, 2018 11:04:56 上午 org.apache.catalina.startup.HostConfig deployDescriptor
信息: Deploying configuration descriptor PushServer.xml
2018-01-09 11:04:56 PushServer stop
一月 09, 2018 11:04:56 上午 org.apache.catalina.startup.HostConfig deployDescriptor
信息: Deploying configuration descriptor x5.xml
[JUSTEP_HOME in UIServer]: D:\WeX5_V3.7
一月 09, 2018 11:04:56 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory app-template
一月 09, 2018 11:04:56 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory docs
一月 09, 2018 11:04:56 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory examples
一月 09, 2018 11:04:57 上午 org.apache.catalina.core.ApplicationContext log
信息: ContextListener: contextInitialized()
一月 09, 2018 11:04:57 上午 org.apache.catalina.core.ApplicationContext log
信息: SessionListener: contextInitialized()
一月 09, 2018 11:04:57 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory ROOT
一月 09, 2018 11:04:57 上午 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on http-8080
一月 09, 2018 11:04:57 上午 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8009
一月 09, 2018 11:04:57 上午 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/12 config=null
一月 09, 2018 11:04:57 上午 org.apache.catalina.startup.Catalina start
信息: Server startup in 2642 ms
2018-01-09 11:05:00 开始-WINDOW生成中间文件: /UI2/shopMgr/index.w
2018-01-09 11:05:00 加载模块:/UI2/system/components/justep/window/server ...
2018-01-09 11:05:00 加载模块:/UI2/system/components/justep/window/server
2018-01-09 11:05:00 加载模块:/UI2/system/components/justep/model/server ...
2018-01-09 11:05:00 加载模块:/UI2/system/components/justep/model/server
2018-01-09 11:05:00 加载模块:/UI2/system/components/justep/contents/server ...
2018-01-09 11:05:00 加载模块:/UI2/system/components/justep/common/server ...
2018-01-09 11:05:00 加载模块:/UI2/system/resources ...
2018-01-09 11:05:00 加载模块:/UI2/system/resources
2018-01-09 11:05:00 加载模块:/UI2/system/components/justep/common/server
2018-01-09 11:05:00 加载模块:/UI2/system/components/justep/contents/server
2018-01-09 11:05:00 加载模块:/UI2/system/components/justep/windowContainer/server ...
2018-01-09 11:05:00 加载模块:/UI2/system/components/justep/windowContainer/server
2018-01-09 11:05:00 结束-WINDOW生成中间文件: /UI2/shopMgr/index.w
2018-01-09 11:05:00 开始-中间文件生成缓存文件: /UI2/shopMgr/index.w
2018-01-09 11:05:01 结束-中间文件生成缓存文件: /UI2/shopMgr/index.w
2018-01-09 11:05:01 加载模块:/UI2/system/service/common ...
2018-01-09 11:05:01 加载模块:/UI2/system/service/common
2018-01-09 11:05:01 开始-WINDOW生成中间文件: /UI2/shopMgr/login.w
2018-01-09 11:05:01 加载模块:/UI2/system/components/justep/panel/server ...
2018-01-09 11:05:01 加载模块:/UI2/system/components/justep/panel/server
2018-01-09 11:05:01 加载模块:/UI2/system/components/justep/titleBar/server ...
2018-01-09 11:05:01 加载模块:/UI2/system/components/justep/titleBar/server
2018-01-09 11:05:01 结束-WINDOW生成中间文件: /UI2/shopMgr/login.w
2018-01-09 11:05:01 开始-中间文件生成缓存文件: /UI2/shopMgr/login.w
2018-01-09 11:05:01 结束-中间文件生成缓存文件: /UI2/shopMgr/login.w
2018-01-09 11:05:07 Found mapping for [POST] path=/naxxm/login/loginAction : ShiroHandler.login(ShiroHandler.java:41)
2018-01-09 11:05:07 Get 'shiroHandler'<class com.naxxm.shiro.handlers.ShiroHandler>
2018-01-09 11:05:07 >> Load definition name=shiroHandler
2018-01-09 11:05:07 Found IocObject(shiroHandler) in AnnotationIocLoader(packages=[com.naxxm])
2018-01-09 11:05:07 >> Make...'shiroHandler'<class com.naxxm.shiro.handlers.ShiroHandler>
2018-01-09 11:05:07 Save object 'shiroHandler' to [app]
2018-01-09 11:05:07 Load class com.naxxm.shiro.handlers.ShiroHandler without AOP
2018-01-09 11:05:07 Get 'dao'<interface org.nutz.dao.Dao>
1.--->20602399
1. 20602399
[FirstRealm] doGetAuthenticationInfo
1.--->20602399
从数据库中获取 username: admin 所对应的用户信息.
nutzdao_realm
info:admin
登录失败: Submitted credentials for token [org.apache.shiro.authc.UsernamePasswordToken - admin, rememberMe=false] did not match the expected credentials.
2018-01-09 11:05:07 Error@/naxxm/login/loginAction :
java.lang.NullPointerException
at com.naxxm.shiro.handlers.ShiroHandler.login(ShiroHandler.java:82)
at com.naxxm.shiro.handlers.ShiroHandler$FM$login$28937752d39234598695f93b24457009.invoke(ShiroHandler.java)
at org.nutz.mvc.impl.processor.MethodInvokeProcessor.process(MethodInvokeProcessor.java:31)
at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
at org.nutz.mvc.impl.processor.AdaptorProcessor.process(AdaptorProcessor.java:30)
at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
at org.nutz.mvc.impl.processor.ActionFiltersProcessor.process(ActionFiltersProcessor.java:58)
at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
at org.nutz.integration.shiro.NutShiroProcessor.process(NutShiroProcessor.java:126)
at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
at org.nutz.mvc.impl.processor.ModuleProcessor.process(ModuleProcessor.java:123)
at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
at org.nutz.mvc.impl.processor.EncodingProcessor.process(EncodingProcessor.java:27)
at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
at org.nutz.mvc.impl.processor.UpdateRequestAttributesProcessor.process(UpdateRequestAttributesProcessor.java:15)
at org.nutz.mvc.impl.NutActionChain.doChain(NutActionChain.java:44)
at org.nutz.mvc.impl.ActionInvoker.invoke(ActionInvoker.java:67)
at org.nutz.mvc.ActionHandler.handle(ActionHandler.java:31)
at org.nutz.mvc.NutFilter.doFilter(NutFilter.java:202)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:745)
package com.naxxm.shiro.realms;
import java.util.HashSet;
import java.util.Set;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.ByteSource;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.mvc.Mvcs;
import com.naxxm.javabean.SysEmployee;
public class DaoRealm extends AuthorizingRealm {
protected Dao _dao;
@Override
protected AuthenticationInfo doGetAuthenticationInfo(
AuthenticationToken token) throws AuthenticationException {
System.out.println("[FirstRealm] doGetAuthenticationInfo");
//1. 把 AuthenticationToken 转换为 UsernamePasswordToken
UsernamePasswordToken upToken = (UsernamePasswordToken) token;
System.out.println("1.--->"+ token.hashCode());
//2. 从 UsernamePasswordToken 中来获取 username
String username = upToken.getUsername();
//3. 调用数据库的方法, 从数据库中查询 username 对应的用户记录
//SysEmployee user = dao().fetch(SysEmployee.class,Cnd.where("name" ,"=", username));
System.out.println("从数据库中获取 username: " + username + " 所对应的用户信息.");
//4. 若用户不存在, 则可以抛出 UnknownAccountException 异常
if("unknow".equals(username)){
throw new UnknownAccountException("用户不存在!");
}
//5. 根据用户信息的情况, 决定是否需要抛出其他的 AuthenticationException 异常.
if("monster".equals(username)){
throw new LockedAccountException("用户被锁定");
}
//6. 根据用户的情况, 来构建 AuthenticationInfo 对象并返回. 通常使用的实现类为: SimpleAuthenticationInfo
//以下信息是从数据库中获取的.
//1). principal: 认证的实体信息. 可以是 username, 也可以是数据表对应的用户的实体类对象.
Object principal = username;
//2). credentials: 密码.
Object credentials = null; //"fc1709d0a95a6be30bc5926fdb7f22f4";
if("admin".equals(username)){
credentials = "038bdaf98f2037b31f1e75b5b4c9b26e";
}else if("user".equals(username)){
credentials = "098d2c478e9c11555ce2823231e02ec1";
}
//3). realmName: 当前 realm 对象的 name. 调用父类的 getName() 方法即可
String realmName = getName();
System.out.println(realmName);
//4). 盐值.
ByteSource credentialsSalt = ByteSource.Util.bytes(username);
SimpleAuthenticationInfo info = null; //new SimpleAuthenticationInfo(principal, credentials, realmName);
info = new SimpleAuthenticationInfo(principal, credentials,credentialsSalt, realmName);
System.out.println("info:" + info);
return info;
}
public static void main(String[] args) {
String hashAlgorithmName = "MD5";
Object credentials = "123456";
Object salt = ByteSource.Util.bytes("admin");
int hashIterations = 1024;
Object result = new SimpleHash(hashAlgorithmName, credentials ,salt, hashIterations);
System.out.println(result);
}
//授权会被 shiro 回调的方法
@Override
protected AuthorizationInfo doGetAuthorizationInfo(
PrincipalCollection principals) {
//1. 从 PrincipalCollection 中来获取登录用户的信息
Object principal = principals.getPrimaryPrincipal();
//2. 利用登录的用户的信息来用户当前用户的角色或权限(可能需要查询数据库)
Set<String> roles = new HashSet<>();
roles.add("user");
if("admin".equals(principal)){
roles.add("admin");
}
//3. 创建 SimpleAuthorizationInfo, 并设置其 reles 属性.
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roles);
//4. 返回 SimpleAuthorizationInfo 对象.
return info;
}
public Dao dao() {
if (_dao == null) {
_dao = Mvcs.ctx().getDefaultIoc().get(Dao.class, "dao");
return _dao;
}
return _dao;
}
public void setDao(Dao dao) {
this._dao = dao;
}
}