[英]Spring Security user logged in but redirected to access denied page
[英]Not able to access Spring Security Logged in User info
我正在使用Spring Security在Web應用程序中進行身份驗證。
現在,我需要訪問用戶信息,Controller中存在以下方法:
@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 。
但是,如果確實將其注釋掉了(允許Spring Security對其進行攔截):
<!-- <security:http pattern="/userstuff/**" security="none" /> -->
然后調用:
http:// host:port / app / userstuff / getUser 返回正確登錄的用戶 。
為什么這樣?
當您使用security="none"
所有spring安全過濾器都將關閉 (請參閱官方文檔中的此項 )。 因此,沒有SecurityContextHolder
,沒有@PreAuthorize
,沒有其他Spring Security功能可用。 例如,通常, SecurityContextHolder
由安全過濾器鏈中的一個過濾器填充。
作為解決方法,幾乎總是可以通過限制匿名用戶來替換security="none"
構造:
<security:http ... />
...
<security:intercept-url pattern="/userstuff/**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
....
</security:http>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.