【发布时间】:2017-11-02 08:28:48
【问题描述】:
抱歉标题,我不知道如何获得更好的标题。
我创建了一个简单的 servlet 并实现了 CDI 拦截器。
这是我的小服务程序
@Inject
UserManagement user;
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
user.setUsername(request.getParameter("username"));
response.getWriter().println(user.getMessage());
}
这是 UserManagement bean:
@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();
}
}
拦截器确实有效,但 servlet 从先前的请求返回 UserManagement bean,尽管记录器会立即显示。
示例
第一个请求:
localhost?username=smitty
浏览器屏幕:
Hello
第二个请求:
localhost?username=werben
浏览器屏幕:
Hello smitty
第三个请求:
localhost?username=jensen
浏览器屏幕:
Hello werben
【问题讨论】:
标签: servlets jakarta-ee cdi