Spring Security:如何从我的控制器中的登录页面获取复选框值?

时间:2017-09-19 01:48:28

标签: spring spring-mvc spring-security

如何在登录页面中获取复选框的值?

在我的Jsp中,我有一个记住我的复选框。

<form:form action="${pageContext.request.contextPath}/amPostLogin" method="POST" modelAttribute="userLogin">
      <form:input type="text" path="username" id="username" placeholder="username"required="required" autofocus="autofocus"/>
      <form:input type="password" path="password" id="password" placeholder="password" required="required"/>
      
      <br><form:checkbox label="Remember Me" path="isRemember" />
      <br><form:checkbox label="Auto Login" path="isAutoLogin"/>
      
      <form:button class="login-button" >Login</form:button>
</form:form>

在我的Spring Security中,我有:

@Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                    .antMatcher("/am*")
                    .authorizeRequests()
                    .anyRequest()
                    .authenticated()
                    .and()
                    .formLogin()
                    .loginPage("/login_AM")
                    .loginProcessingUrl("/amPostLogin")
                    .failureUrl("/login_AM?error=true")
                    .defaultSuccessUrl("/amChatPage")
                    .and()
                    .logout()
                    .logoutUrl("/amLogout")
                    .logoutSuccessUrl("/logoutSuccessful_AM")
                    .and()
                    .exceptionHandling()
                    .accessDeniedPage("/am403")
                    .and().httpBasic()
                    .and().csrf().disable();
        }

现在我想在控制器中获取AutoLogin和RememberMe的值。 我该怎么做?

我尝试为“/ amPostLogin”创建一个控制器但由于某种原因它没有进入控制器。如何在控制器中获取这些复选框的值?请有人帮助我。谢谢。

ANSWER

我没有在控制器中获取checkbox的值,而是创建了一个AuthenticationSuccessHandler并在那里获取值。

@Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {

        boolean isRemember = Boolean.parseBoolean(request.getParameter("isRemember"));
        boolean isAutoLogin = Boolean.parseBoolean(request.getParameter("isAutoLogin"));

       response.setStatus(HttpServletResponse.SC_OK);
        response.sendRedirect("amChatPage");
    }

1 个答案:

答案 0 :(得分:0)

如果您使用的是spring mvc,那么您的登录jsp需要进行一些更改。 1)您的登录页面操作应映射到j_spring_security_check.htm,Spring的UsernamePasswordAuthenticationFilter.java拦截此URL进行身份验证。 2)你的用户名和密码应映射到j_username和j_password,这个上面的过滤器要求设置这些字段,你可以查看源代码。 3)您还需要在context.xml中提供身份验证提供程序 4)您需要定义lgtAuthenticationFailureHandler和lgtAuthenticationsuccessHandler。从lgtAuthenticationsuccessHandler您可以直接到您的申请主页。

这是登录部分。您可以在春季推荐许多网站进行登录验证。

对于cookie部分,

你可以做的就是点击“记住我”复选框,你可以编写一个javascript,它会创建一个记住我的cookie,其中包含用户名和所有其他参数,如expiry n all。

当下次加载页面时,您可以编写一个onload javascript funtion,在那里您可以检查是否记住我存在cookie并且基于您可以填充用户名并勾选您记住我的复选框。

这是我实施的方式,所以你可以试试这个。