Web アプリケーションでの認証に Spring Security を使用しています。
ここで、コントローラーに次のメソッドが存在するユーザー情報にアクセスする必要があります。
@RequestMapping(value = "/userstuff")
@Controller
public class SomeUserController {
@RequestMapping(value = "getUser", method = RequestMethod.GET)
@ResponseBody
public UserDetails getUser(Locale locale, Model model) {
UserDetails userDetails = null;
SecurityContext securityContext = SecurityContextHolder.getContext();
Authentication authentication = securityContext.getAuthentication();
if (authentication != null) {
Object principal = authentication.getPrincipal();
userDetails = (UserDetails) (principal instanceof UserDetails ? principal
: null);
}
return userDetails;
}
}
コントローラーの URL が applicationContext-Security.xml で次のようにセキュリティ チェックの対象外になっている場合:
<security:http pattern="/userstuff/**" security="none" />
次に呼び出す
http:// host:port /app/userstuff/getUser - null を返します。
しかし、それをコメントアウトした場合(春のセキュリティがそれを傍受できるようにします):
<!-- <security:http pattern="/userstuff/**" security="none" /> -->
次に呼び出す:
http:// host:port /app/userstuff/getUserは、ログインしているユーザーを正しく返します。
なんでそうなの?