我有一个可重用的数据访问组件,正在Winform应用程序和Web应用程序中使用。部分模块需要记录对数据进行任何更改的用户。即CreatedBy或ModifiedBy
如果该组件被严格用于Winform访问,我可以使用WindowsIdentity.GetCurrent()。Name来获取当前用户的名称,如果该组件仅在Web应用程序中使用,我可以使用HttpContext来获取使用名称。
我想要做的是使组件足够灵活,以便在两种情况下都可以使用它。那么如何检测调用该组件的应用程序类型,以便我可以检查用户名的结果上下文?
答案 0 :(得分:1)
您始终可以查看ERROR [main] 2018-04-09 18:19:25,014 CassandraDaemon.java:675 -
Exception encountered during startup
java.lang.AbstractMethodError: org.apache.cassandra.utils.JMXServerUtils$Exporter.exportObject(Ljava/rmi/Remote;ILjava/rmi/server/RMIClientSocketFactory;Ljava/rmi/server/RMIServerSocketFactory;Lsun/misc/ObjectInputFilter;)Ljava/rmi/Remote;
at javax.management.remote.rmi.RMIJRMPServerImpl.export(RMIJRMPServerImpl.java:150) ~[na:1.8.0_162]
at javax.management.remote.rmi.RMIJRMPServerImpl.export(RMIJRMPServerImpl.java:135) ~[na:1.8.0_162]
at javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:405) ~[na:1.8.0_162]
at org.apache.cassandra.utils.JMXServerUtils.createJMXServer(JMXServerUtils.java:104) ~[main/:na]
at org.apache.cassandra.service.CassandraDaemon.maybeInitJmx(CassandraDaemon.java:139) [main/:na]
at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:183) [main/:na]
at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:569) [main/:na]
at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:658) [main/:na]
是否存在。如果它没有(HttpContext
),则表示您没有运行网络应用程序。
HttpContext.Current = null
另一种方法是使用当前线程的主体,如果你正在设置它(你应该):
var httpContext = HttpContext.Current;
var userName = (httpContext == null)
? WindowsIdentity.GetCurrent().Name
: httpContext.User.Identity.Name;