簡體   English   中英

j_spring_security_check始終重定向到登錄

[英]j_spring_security_check always redirect to login

我使用自定義登錄表單和自定義UserDetailsService獲得了spring security 4。 問題是每次我提交到j_spring_security_check它總是會重定向回登錄頁面。 感覺它正在處理容器中的j_spring_security_check另一個資源。

下面是我的配置。 我缺少什么?

應用程序的security.xml

<security:http auto-config="true" use-expressions="true">
    <security:intercept-url pattern="/login" access="permitAll" />
    <security:intercept-url pattern="/logout" access="permitAll" />
    <security:intercept-url pattern="/css/**/*.css" access="permitAll" />
    <security:intercept-url pattern="/fonts/*.*" access="permitAll" />
    <security:intercept-url pattern="/**" access="isAuthenticated()" />
    <security:form-login login-page="/login" default-target-url="/landing" authentication-failure-url="/login?error" authentication-success-handler-ref="loginSuccesHandler" />
    <security:logout logout-success-url="/logout" />
    <security:csrf disabled="true" />
</security:http>
<security:authentication-manager>
    <security:authentication-provider ref="daoAuthenticationProvider" />
</security:authentication-manager>
<bean id="daoAuthenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
    <property name="userDetailsService" ref="userDetailsService" />
    <property name="passwordEncoder" ref="passwordEncoder" />
</bean>
<bean id="userDetailsService" class="a.b.c.MyAppUserDetailService" />
<bean id="loginSuccesHandler" class="a.b.c.LoginSuccessHandler" />
<bean id="passwordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />

login.jsp的

<body>
    <form action="<c:url value='j_spring_security_check'/>" name="f" method="post">
        <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
        <div class="form-group">
            <label class="control-label" for="username">Username</label> <input type="text" name="j_username" id="username" class="form-control" style="font-size: 1.5em" maxlength="100" />
        </div>
        <div class="form-group">
            <label class="control-label" for="password">Password</label> <input type="password" name="j_password" id="password" class="form-control" style="font-size: 1.5em" maxlength="100" />
        </div>
        <button class="btn btn-lg btn-info btn-block shadow-z-3" type="submit"> Login </button>
    </form>
</body>

登錄控制器

@Controller
@RequestMapping(value="/login")
public class LoginController {

@RequestMapping(method = RequestMethod.GET)
public String login(HttpSession session,HttpServletRequest req, ModelMap model) {
    AuthenticationException ase = (AuthenticationException) session.getAttribute("SPRING_SECURITY_LAST_EXCEPTION");
    if (ase != null) {
        model.addAttribute("errorMsg",ase.getMessage());
    }
    return "login";
}


@RequestMapping(value = "/logout", method = RequestMethod.GET)
public String logout(HttpSession session) {

    return "login";
}
}

我找到了答案。 在將spring form-login login-processing-url屬性添加到form-login之后,彈簧4與彈簧3的區別在於它按預期工作。

查看此鏈接了解詳情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM