我在我的 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返回登录用户正确。
为什么这样?