0

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は、ログインしているユーザーを正しく返します

なんでそうなの?

4

1 に答える 1