使用java spring AbstractPreAuthenticatedProcessingFilter“让我登录”

时间:2013-11-25 05:32:11

标签: spring spring-mvc login filter

为了在我的使用Spring 2.5的应用程序上实现“保持登录状态”选项,我试图通过创建一个扩展AbstractPreAuthenticatedProcessingFilter的CustomPreAuthenticatedProcessingFilter来实现它。但是,我无法这样做可能是因为我错过了一些事情。以下是我到目前为止所做的事情:

  1. 创建CustomPreAuthenticaionProcessingFilter:

    import javax.servlet.http.Cookie;         import javax.servlet.http.HttpServletRequest;

    import org.springframework.security.ui.preauth.AbstractPreAuthenticatedProcessingFilter;
    
    import com.domain.User;
    import com.service.UserService;
    
    public class CustomPreAuthenticaionProcessingFilter extends
        AbstractPreAuthenticatedProcessingFilter {
    
    private UserService userService;
    
    @Override
    public int getOrder() {
        // TODO Auto-generated method stub
        return 0;
    }
    
    @Override
    protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) {
        Cookie[] cookies = request.getCookies();
        String[] cookieValues = null;
        for (Cookie cookie : cookies) {
            if(cookie.getName().equalsIgnoreCase("loggedInCookie")){
                cookieValues = cookie.getValue().split(":"); 
            }
        }
        if(cookieValues!=null && cookieValues.length==3){
            try {
                User user = userService.getLoggedInUser(cookieValues[0], cookieValues[1], cookieValues[2]);
                if(user!=null)
                    return user;
            } catch (Exception e) {
                System.out.println("not authenticated");
            }
        }
        return "";
    }
    
    @Override
    protected Object getPreAuthenticatedCredentials(HttpServletRequest request) {
        return "";
    }
    
      /**
     * @param authenticationManager
     *            The AuthenticationManager to use
     */
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
    
    
    }
    
  2. 创建的拦截器,用于检查cookie是否存在,如果没有,则创建一个。

  3. 我在这里面临的问题是,多次调用过滤器并不确定原因,即使通过过滤器检索对象,它也不会直接重定向到绕过登录页面的应用程序。

    如果有人在同一行上实现了某些内容,那将非常有用。

    谢谢, -V

1 个答案:

答案 0 :(得分:2)

您是否完成了http://docs.spring.io/autorepo/docs/spring-security/3.0.x/reference/remember-me.html

如果你能够遵循这个方法使用更高版本的spring也不难实现。