タイトルのため申し訳ありません、より良いタイトルを得ることはできません。CDIインターセプタがサーブレットの現在のリクエストと同時ではありません
私は単純なサーブレットを作成し、CDIインターセプタを実装します。
これは
@Inject
UserManagement user;
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
user.setUsername(request.getParameter("username"));
response.getWriter().println(user.getMessage());
}
これはUserManagement豆である私のサーブレットです:
@SessionScoped
public class UserManagement implements Serializable{
private String username;
private String message = "";
@UsernameSet
public void setUsername(String username){
this.username = username;
}
}
これは、結合インターセプター(@UsernameSet)です:
@InterceptorBinding
@Inherited
@Target({ TYPE, METHOD })
@Retention(RUNTIME)
@Documented
public @interface UsernameSet {
}
これはインターセプタです:
@UsernameSet
@Interceptor
public class UserInterceptor implements Serializable {
@Inject
UserManagement user;
@AroundInvoke
public Object aroundInvoke(InvocationContext ic) throws Exception {
LOGGER.info("Entering method: " + ic.getMethod().getName());
user.setMessage("Hello " + user.getUsername());
return ic.proceed();
}
}
インターセプタは機能しますが、サーブレットは直前のリクエストからUserManagement
beanを返しますが、ロガーはすぐに表示されます。
例
まず要求: localhost?username=smitty
ブラウザ画面: Hello
2番目のリクエスト: localhost?username=werben
ブラウザ画面: Hello smitty
第三の要求: localhost?username=jensen
ブラウザ画面:あなたはインターセプターを作成するとき Hello werben