【问题标题】:Writing Interceptor Filter for user Authentication为用户身份验证编写拦截器过滤器
【发布时间】: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


【解决方案1】:

如果您使用的是 spring,您可以使用 spring security 来执行此操作,您的用户可以拥有 ROLES,因此您不会只检查用户名,https://spring.io/guides/gs/securing-web/ 这是您可以查看的指南,这是一个非常简单的方法,所以你的方法有一个注释来检查用户的权限。

这里还有一件事可以帮助你:Spring Security with roles and permissions

http://www.journaldev.com/8748/spring-security-role-based-access-authorization-example

【讨论】:

  • 感谢您提供的信息。我应该提到我现在正在尝试不使用弹簧安全性来做到这一点。
  • 只有一个问题,你为什么要这么做?有什么原因吗?
  • 是的,所以我可以自己理解和实现该功能。
  • 好的,在这种情况下你需要从这个句柄中排除登录页面本身,否则你将永远有一个循环。但无论如何这很好知道,但我会告诉你尝试使用 spring 安全角色来实现,这将为你提供营销所需的比这样做更多的知识。
猜你喜欢
  • 1970-01-01
  • 2015-11-19
  • 2018-12-05
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2021-01-03
  • 2017-02-01
  • 2020-06-06
相关资源
最近更新 更多