我需要在Spring 3.2 MVC Web应用程序中包含Jasig CAS身份验证。
目前,我有两个罐子(CAS核心客户端和公司特定的扩展名),web.xml中有一堆过滤器。 一旦CAS服务器重定向请求,一些会话属性就会提供记录的配置文件数据。
我正在使用Singleton服务处理它们。 调用此服务是棘手的部分。我可以使用拦截器在每次Controller调用时调用我的Auth服务吗?
我非常确定使用Spring Security是一种更好的方式,但我无法正确理解它是如何构建的。
答案 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>