如何在登录表单中添加spring security

时间:2014-09-03 09:40:56

标签: java spring jsp spring-mvc spring-security

我有一个包含电子邮件地址和密码的登录页面。如何使用spring security进行安全登录。我不明白怎么做..?在我的网络应用程序中,第一页是带有userEmail和密码的登录页面。

这是我的jsp页面

<form:form action="/pname/signin" modelAttribute="user"  method="post" id="form" >
  <form:input path="userEmailId"  placeholder="User Name"  />
  <form:password path="userPassword"  placeholder="Password"  />
  <a href="signin" class="anchorStyle"><input type="submit" value="signin"/> </a>
</form:form>

这是我的spring-security.xml

 <http auto-config="true">  
    <intercept-url pattern="/**" access="ROLE_ADMIN" />  
    <logout logout-success-url="/signin?logout" />
 </http>  

 <authentication-manager>  
   <authentication-provider>  
     <user-service>  
       <user name="user" password="password" authorities="ROLE_ADMIN" />  
     </user-service>  
   </authentication-provider>  
 </authentication-manager>  

请告诉我我的错误在哪里。成功登录后,也应该进入问候页面。

2 个答案:

答案 0 :(得分:1)

This tutorialthis tutorial可以为您提供帮助。您基本上定义了要在后台检查的必要信息,例如 .xml 文件中的userEmail和userPassword。

之后,在 .jsp 文件中,您将网址值设为 j_spring_security_check ,以便将您的密码与您的电子邮件参数进行匹配,以及授权,查看该用户是否具有打开您在网络应用中提供的某些网页的授权。

请参阅此示例以启发您: 这是 .jsp 视图页面:

<c:if test="${not empty msg}">
                <div class="msg">${msg}</div>
            </c:if>
            <form name="loginForm" action="<c:url value="/j_spring_security_check"/> " method="post">
                <c:if test="${not empty error}">
                    <div class="error" style="color: #ff0000;">${error}</div>
                </c:if>
                <div class="form-group">
                    <label for="userEmail">E-Posta</label>
                    <input id="userEmail" type="email" class="form-control" name="userEmail" placeholder="E-Mail Here!" required>
                </div>

                <div class="form-group">
                    <label for="userPassword">Şifre</label>
                    <input id="userPassword" type="password" class="form-control" name="userPassword" placeholder="Give me your Password!" required>
                </div>

                <div class="form-group">
                    <button type="submit" class="btn btn-send-message pull-right">GİRİŞ</button>
                </div>

                <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
            </form>

这是 security.xml 文件:

<security:http auto-config="true">
    <security:intercept-url pattern="/addPost/**" access="ROLE_USER"/>
    <security:form-login
        login-page="/login"
        default-target-url="/addPost/"
        authentication-failure-url="/login?error"
        username-parameter="userEmail"
        password-parameter="userPassword" />
    <security:logout logout-success-url="/login?logout" />
</security:http>

<security:authentication-manager>
    <security:authentication-provider>
        <security:jdbc-user-service data-source-ref="dataSource"
                                    authorities-by-username-query="SELECT userEmail, authority FROM AUTHORITIES WHERE userEmail = ?"
                                    users-by-username-query="SELECT userEmail, userPassword, isActive FROM USERS WHERE userEmail = ?"
        />
    </security:authentication-provider>
</security:authentication-manager>

据我所知,您的代码中没有添加任何 j_spring_security_check 作为值 .jsp 视图。因此,您的代码并不知道在哪里可以获得凭据。此外,我相信您也应该将 表单登录 添加到 .xml 文件中,以便为您的登录过程提供说明。

希望这对你有所帮助。

答案 1 :(得分:0)

This tutorial应该让你去。根据可用信息,您仍然很难找出配置中缺少的内容。本教程介绍了如何限制除登录页面之外的每个页面的访问。它还显示了在成功登录后如何转发到目标页面。例如,请参阅此http配置:

<http use-expressions="true">
  <intercept-url pattern="/login*" access="isAnonymous()" />
  <intercept-url pattern="/**" access="isAuthenticated()"/>

  <form-login
     login-page='/login.html'
     default-target-url="/homepage.html"
     authentication-failure-url="/login.html?error=true" />

  <logout logout-success-url="/login.html" />

</http>