Spring Security を介して Spring REST サービスへのリクエストをログに記録するにはどうすればよいですか? (いくつかの例を教えてください)
質問する
91 次
2 に答える
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>
spring-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
単純なサーブレットフィルタの実装です
于 2012-12-14T12:05:19.823 に答える
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");
アプリケーションの 1 つでそれを行いました。これは Spring MVC プログラムでしたが、それほど重要ではありません。
ただし、ユーザー名をどこかのファイルに実際に記録することはありません。ある種のプロトコルデータベースをセットアップして、より多くの情報をログに記録することもできます (「X が YY 時間に Z を実行して MYSERVICE にアクセスしました」など)。
于 2012-12-14T12:02:53.513 に答える