使用Spring Security记录请求

时间:2012-12-14 11:47:16

标签: java spring spring-security

如何通过Spring Security将请求记录到Spring REST服务? (请给我一些例子)

2 个答案:

答案 0 :(得分: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计划,但这不应该太重要。

但是我不会真的将用户名记录到某个文件中。您可以尝试设置某种协议数据库,并记录更多信息(“Y在yY时间访问MYSERVICE做Z”或其他事情)

答案 1 :(得分: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>

弹簧-config.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实现