スプリングsecurityはユーザ情報を取得します.
スプリングsecurityはユーザ情報を取得します.
本論文では、ユーザ情報の取得方法について説明する.いくつかの一般的な方法を紹介します.
ビーンでユーザを取得する
現在の認証ユーザを取得する最も簡単な方法は、SecurityContect Holder類の静的方法である.
コントローラからユーザを取得する
@Controllerのコメントのbeanには、追加のオプションがあります.printipadは直接に方法パラメータとして使用できます.フレームは自動的に割り当てられます.
springの依存注入機能を十分に利用するために、認証情報はどこでも取得できます.@Controller注解のbeanだけではなく、簡単な外観で静的なアクセスを隠します.
現在の認証ユーザは、jspページでも取得できます.spring securityタグでサポートします.まず、ページでラベルを定義する必要があります.
本論文は、springアプリケーションにおいてユーザ情報をどのように取得するかを説明し、一般的な静的方法アクセス機構を紹介し始め、後にはより良い注入方式を提供し、printipadを取得する.
本論文では、ユーザ情報の取得方法について説明する.いくつかの一般的な方法を紹介します.
ビーンでユーザを取得する
現在の認証ユーザを取得する最も簡単な方法は、SecurityContect Holder類の静的方法である.
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String currentPrincipalName = authentication.getName();
以下はバージョンコードを改善します.取得前に認証ユーザが存在するかどうかを確認します.Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (!(authentication instanceof AnonymousAuthenticationToken)) {
String currentUserName = authentication.getName();
return currentUserName;
}
もちろん、静的呼び出しの欠点は、コードのテスト可能性が著しく低下することである.私たちは引き続き新しい方式の実現を探求します.コントローラからユーザを取得する
@Controllerのコメントのbeanには、追加のオプションがあります.printipadは直接に方法パラメータとして使用できます.フレームは自動的に割り当てられます.
import java.security.Principal;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class SecurityController {
@RequestMapping(value = "/username", method = RequestMethod.GET)
@ResponseBody
public String currentUserName(Principal principal) {
return principal.getName();
}
}
認証情報を使用することもできます.import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class SecurityController {
@RequestMapping(value = "/username", method = RequestMethod.GET)
@ResponseBody
public String currentUserName(Authentication authentication) {
return authentication.getName();
}
}
フレームワークは、できるだけ柔軟にするために、AuthenticationクラスのAPIが使いやすいです.したがって、変換によってprintipadオブジェクトを返すことができる.UserDetails userDetails = (UserDetails) authentication.getPrincipal();
System.out.println("User has authorities: " + userDetails.getAuthorities());
最後の方法は直接http requestを通ります.import java.security.Principal;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class SecurityController {
@RequestMapping(value = "/username", method = RequestMethod.GET)
@ResponseBody
public String currentUserNameSimple(HttpServletRequest request) {
Principal principal = request.getUserPrincipal();
return principal.getName();
}
}
ユーザー情報はユーザーインターフェースで取得します.springの依存注入機能を十分に利用するために、認証情報はどこでも取得できます.@Controller注解のbeanだけではなく、簡単な外観で静的なアクセスを隠します.
public interface IAuthenticationFacade {
Authentication getAuthentication();
}
@Component
public class AuthenticationFacade implements IAuthenticationFacade {
@Override
public Authentication getAuthentication() {
return SecurityContextHolder.getContext().getAuthentication();
}
}
この外観は認証対象を露出し、静的アクセスコードを隠して、トラフィックを結合させ、テストを便利にする.@Controller
public class SecurityController {
@Autowired
private IAuthenticationFacade authenticationFacade;
@RequestMapping(value = "/username", method = RequestMethod.GET)
@ResponseBody
public String currentUserNameSimple() {
Authentication authentication = authenticationFacade.getAuthentication();
return authentication.getName();
}
}
jspでユーザー情報を取得する現在の認証ユーザは、jspページでも取得できます.spring securityタグでサポートします.まず、ページでラベルを定義する必要があります.
その後、prinncipadを引用することができます.
authenticated as
合計本論文は、springアプリケーションにおいてユーザ情報をどのように取得するかを説明し、一般的な静的方法アクセス機構を紹介し始め、後にはより良い注入方式を提供し、printipadを取得する.