2013-01-23 75 views
1

我正在使用Spring和Ldap進行用戶認證,現在我想在用戶已登錄時將用戶重定向到主頁,我嘗試了幾個解決方案,我通過google但沒有運氣。下面是我的配置代碼...如何使用Spring和Ldap將登錄用戶重定向到主頁

彈簧security.xml文件

<security:http auto-config="true" use-expressions="true" 
     access-denied-page="/denied" access-decision-manager-ref="accessDecisionManager" 
     disable-url-rewriting="true"> 

     <security:remember-me key="_spring_security_remember_me" 
      token-validity-seconds="864000" token-repository-ref="tokenRepository" /> 

     <security:intercept-url pattern="/login/login" 
      access="permitAll" /> 



     <security:intercept-url pattern="/resources/**" 
      access="permitAll" /> 

     <security:intercept-url pattern="/member/*" 
      access="permitAll" /> 

     <security:intercept-url pattern="user/admin/admin" 
      access="hasRole('ROLE_ADMIN')" /> 

     <security:intercept-url pattern="/user/user" 
      access="hasRole('ROLE_USERS')" /> 




     <security:form-login login-page="/login/login" 
      authentication-failure-url="/login/login?error=true" 
      default-target-url="/checking" /> 

     <security:logout invalidate-session="true" 
      logout-success-url="/login/login" logout-url="/login/logout" /> 

     <security:custom-filter ref="captchaCaptureFilter" 
      before="FORM_LOGIN_FILTER" /> 
     <!-- <security:custom-filter ref="captchaVerifierFilter" after="FORM_LOGIN_FILTER" 
      /> --> 

     <!-- <security:session-management 
      invalid-session-url="/logout.html"> 
      <security:concurrency-control 
       max-sessions="1" error-if-maximum-exceeded="true" /> 

     </security:session-management> 
     <security:session-management 
      session-authentication-strategy-ref="sas" /> --> 
    </security:http> 

我的登錄控制器

public class LoginController { 

    @Autowired 
    private User user; 

    @Autowired 
    SecurityContextAccessor securityContextAccessor; 

    @RequestMapping(value = "login/login", method = RequestMethod.GET) 
    public String getLogindata(
      @RequestParam(value = "error", required = false) String error, 
      Model model) { 

     Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 

     model.addAttribute("error", error); 

     if (securityContextAccessor.isCurrentAuthenticationAnonymous() && auth.getPrincipal() == null) { 
      return "login/login"; 
     } else { 
      return "redirect:/member/user"; 
     } 
    } 
} 

auth.getName()總是給我,即使我是匿名用戶已經登錄....

+0

如果您已經檢查了SecurityContextHolder並且它包含一個'AnonymousAuthenticationToken',那麼從Spring Security的角度來看,您沒有進行身份驗證(前提是請求已通過安全篩選器鏈)。檢查一下您的瀏覽器是否發送了一個會話cookie,該cookie與會話Id相匹配。 –

回答

0

你應該寫你的目標重定向到主頁, 成功登錄後我n複製到spring-security.xml中的default-target-url,而不是default-target-url =「/ checking」。

我不確定你想在/ login/login Controller中實現什麼功能? 如果你只希望重定向用戶,在成功登錄到/成員/用戶,你應該寫:

 <security:form-login login-page="/login" 
     always-use-default-target='true' 
     default-target-url="/member/user" 
     authentication-failure-url="/login/login?error=true" 
     /> 

和登錄器應該是這樣的:

@RequestMapping(value="/login", method = RequestMethod.GET) 
public String login(ModelMap model) { 
return "login"; 
} 

如果您的驗證提供商確定並且正確,Spring安全會在您成功登錄後自動將您重定向到/ member/user。

+0

我的問題是不成功登錄後重定向用戶,但假設我已成功登錄,而不是點擊登錄鏈接,我不應再被要求重新登錄,而應該重定向到/ member/login – Ruby

+1

我建議隱藏登錄鏈接,之後成功登錄。像這樣:<%@ taglib prefix =「sec」uri =「http://www.springframework.org/security/tags」%> Login<秒:授權> – ivi

相關問題