如何通过 Spring Security 记录对 Spring REST 服务的请求?(指出一些例子)
问问题
91 次
2 回答
0
一旦 Spring Security 正确设置并工作,您可以通过获取 SecurityContext 并从那里获取 UserDetails 来访问当前登录用户的凭据(或至少是用户名):
final Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
String username = null;
if (principal instanceof UserDetails) {
username = ((UserDetails) principal).getUsername();
} else {
username = principal.toString();
}
log.debug("User: " + username + " has accessed the service");
我们在其中一个应用程序中做到了这一点。这是一个 Spring MVC 程序,但这并不重要。
但是,我不会真正将用户名记录到某个文件中。您可以尝试设置某种协议数据库,并记录更多信息(“X 在 YY 时间访问 MYSERVICE 做 Z”或其他内容)
于 2012-12-14T12:02:53.513 回答
0
web.xml
<filter>
<filter-name>securityFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>securityFilter</filter-name>
<url-pattern>/*</url-pattern>
<url-pattern>//</url-pattern>
</filter-mapping>
弹簧配置.xml
...
<bean class="com.examlple.MyLogFilter" id="logFilter"/>
...
<bean class="org.springframework.security.web.FilterChainProxy" id="securityFilter">
<sec:filter-chain-map path-type="ant">
<sec:filter-chain filters="logFilter,otherfilter1,otherfilter2" pattern="/myRESTservicePath/**"/>
....
MyLogFilter
是一个简单的 servlet Filter 实现
于 2012-12-14T12:05:19.823 回答