SpringSecurity2 认证成功后跳转的页面

认证成功后,Spring会determineTargetUrl以决定跳转到哪里去:

  org.springframework.security.ui.AbstractProcessingFilter

 protected String determineTargetUrl(HttpServletRequest request) {
        // Don't attempt to obtain the url from the saved request if alwaysUsedefaultTargetUrl is set
    	String targetUrl = alwaysUseDefaultTargetUrl ? null : 
    		targetUrlResolver.determineTargetUrl(getSavedRequest(request), request, SecurityContextHolder.getContext().getAuthentication());

        if (targetUrl == null) {
            targetUrl = getDefaultTargetUrl();
        }

        return targetUrl;
    }
 

  有两种方法可以跳到非设置的默认的url去,可看TargetUrlResolverImpl的代码:

 

        public String determineTargetUrl(SavedRequest savedRequest, HttpServletRequest currentRequest,     Authentication auth) {

        String targetUrl = currentRequest.getParameter(targetUrlParameter);
        
        if (StringUtils.hasText(targetUrl)) {
            try {
                return URLDecoder.decode(targetUrl, "UTF-8");
            } catch (UnsupportedEncodingException e) {
                throw new IllegalStateException("UTF-8 not supported. Shouldn't be possible");
            }
        }

        if (savedRequest != null) {
            if (!justUseSavedRequestOnGet || savedRequest.getMethod().equals("GET")) {
                targetUrl = savedRequest.getFullRequestUrl();
            }
        }

        return targetUrl;
	}

   创建SavedRequest并放到Session里的方法如下:

 SavedRequest savedRequest = new SavedRequest(request, new PortResolverImpl());
		   request.getSession(true).setAttribute(AbstractProcessingFilter.SPRING_SECURITY_SAVED_REQUEST_KEY,savedRequest);

    这种方式记录下了你当前请求的URL,认证成功后会跳回到这个URL。

    而另外一个就是利用:

    /j_spring_cas_security_check?"+TargetUrlResolverImpl.DEFAULT_TARGET_PARAMETER+"="+targetUrl;

 

   判断是否已经认证可以这样看:

SecurityContextHolder.getContext().getAuthentication().getPrincipal()!=null&&

     !"anonymousUser".equals( SecurityContextHolder.getContext().getAuthentication().getPrincipal())

同时满足表示已经登录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值