Spring MVC自定义身份验证

时间:2015-02-05 17:05:01

标签: java spring spring-mvc cas

我需要在Spring 3.2 MVC Web应用程序中包含Jasig CAS身份验证。

目前,我有两个罐子(CAS核心客户端和公司特定的扩展名),web.xml中有一堆过滤器。 一旦CAS服务器重定向请求,一些会话属性就会提供记录的配置文件数据。

我正在使用Singleton服务处理它们。 调用此服务是棘手的部分。我可以使用拦截器在每次Controller调用时调用我的Auth服务吗?

我非常确定使用Spring Security是一种更好的方式,但我无法正确理解它是如何构建的。

1 个答案:

答案 0 :(得分:0)

我终于使用了一个拦截器。

@Component
public class InterceptorAuth extends HandlerInterceptorAdapter {
    @Autowired
    private IAuthService authService;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //AuthService checks session for login attributes, given through CAS servlet
        //AuthBean contains login data ; if it's null, login has failed
        AuthBean authBean = authService.getAuthBean(request);
        String reqUri = request.getRequestURI();
        String serviceName = reqUri.substring(reqUri.lastIndexOf("/") + 1, reqUri.length());
        String action = request.getParameter("action") != null ? request.getParameter("action") : "";
        //If Login failed, redirect to Error Page (Auth Controller / Error Action)
        //We let through if requested URL is Error Page itself
        //(This allows us to use a dynamic page ; unless we'll use a static HTML page called directly from here)
        if (authBean == null && !serviceName.equals("authError") && !action.equals("errorAuth")) {
            ModelAndView mv = new ModelAndView("redirect:auth.ctrl?action=errorAuth"); 
            ModelAndViewDefiningException mvde = new ModelAndViewDefiningException(mv); 
            throw mvde; 
        }
        return super.preHandle(request, response, handler);
    }
}

必需的Spring XML配置

<mvc:interceptors>
  <bean class="com.demo.sample.interceptor.InterceptorAuth"></bean>
</mvc:interceptors>