【发布时间】:2017-06-15 16:23:16
【问题描述】:
为琐碎的 Web 应用程序创建一个简单的过滤器。
- 登录
- 注册
- 首页
- 功能
如果用户没有使用登录名“admin”登录,或者尝试访问 /home 资源或 /feature 资源,他们应该被路由回登录页面。
但是,我似乎遇到了重定向循环问题。这种方法有什么问题。我觉得这种需求的解决方法是不正确的。
public class LoginInterceptor extends HandlerInterceptorAdapter {
private static final Logger logger = Logger.getLogger("LoginInterceptor.class");
// to be used checking session management for user.
@Override
public boolean preHandle(HttpServletRequest request,HttpServletResponse response,
Object handler) throws Exception {
logger.log(Level.INFO, "[][][][][] +++ prehandle");
if (request.getAttribute("username") != null) {
if (request.getAttribute("username").equals("admin")) {
return true;
} else
response.sendRedirect("/sessionmanagement/login");
return false;
} else if (request.getAttribute("username") == null & !request.getRequestURI().equals("/login")) {
// return false and redirect to login.
response.sendRedirect("/sessionmanagement/login");
return false;
}
// return false and redirect to login.
response.sendRedirect("/sessionmanagement/register");
return false;
}
}
【问题讨论】:
-
LoginInterceptor的网址格式是什么? -
还添加if条件来检查请求URL是否包含/sessionmanagement,这将帮助您避免循环。
-
/* 是拦截器的 url 模式
-
Arsen - 你到底是什么意思? /sessionmanagement 是应用程序的根上下文
-
胡思乱想,但不是
getAttribute,您实际上想检查getParameter(假设您想检查请求参数的存在和值)。
标签: java spring authentication handler interceptor