自定义AuthenticationProvider无法从登录

时间:2015-09-02 22:16:06

标签: java spring authentication spring-security

在使用Spring Security的Spring MVC应用程序中,我有一个自定义login视图,要求提供三个字段(usernamepasswordpin)。我也有自定义AuthenticationProvider,但不知何故,自定义AuthenticationProvider无法读取用户提交的pin代码,因此无法提供自定义身份验证。 我需要更改或添加哪些内容才能让自定义AuthenticationProvider能够访问和使用用户输入的密码?

以下是CustomAuthenticationProvider.java

public class CustomAuthenticationProvider implements AuthenticationProvider{

    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
        String name = authentication.getName();
        String password = authentication.getCredentials().toString();
        String details = authentication.getDetails().toString();
        System.out.println("----------- Inside Custom Authentication Provider -----------");
        System.out.println("name is: "+name);
        System.out.println("password is: "+password);
        System.out.println("details is: "+details);
        List<GrantedAuthority> grantedAuths = new ArrayList<>();
        if (name.equals("admin") && password.equals("system")) {
            grantedAuths.add(new SimpleGrantedAuthority("ROLE_ADMIN"));  
        } 
        if(pincodeEntered(name)){
            grantedAuths.add(new SimpleGrantedAuthority("registered"));  
        }
        Authentication auth = new UsernamePasswordAuthenticationToken(name, password, grantedAuths);
        return auth;
    }

    @Override
    public boolean supports(Class<?> authentication) {
        return authentication.equals(UsernamePasswordAuthenticationToken.class);
    }

    private boolean pincodeEntered(String userName){
        // Lookup can be added here when the pincode becomes available
        return true;
    }
}

注意:当用户尝试进行身份验证时,来自CustomAuthenticationProvider的SYSO会输出用户名和密码(以及ip地址和sessionId的详细信息),但不会打印出密码。

以下是login.jsp

<?xml version="1.0" encoding="ISO-8859-1" ?>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Custom Login page</title>
<style>.error {color: red;}</style>
</head>
<body>
<div class="container">
<h1>Custom Login page</h1>
<p>
<c:if test="${error == true}">
    <b class="error">Invalid login or password.</b>
</c:if>
</p>
<form method="post" action="<c:url value='j_spring_security_check'/>" >
<table>
<tbody>
    <tr>
        <td>Login:</td>
        <td><input type="text" name="j_username" id="j_username"size="30" maxlength="40"  /></td>
    </tr>
    <tr>
        <td>Password:</td>
        <td><input type="password" name="j_password" id="j_password" size="30" maxlength="32" /></td>
    </tr>
    <tr>
        <td>Pin:</td>
        <td><input type="text" name="pin" id="pin"size="30" maxlength="40"  /></td>
    </tr>
    <tr>
    <td colspan=2>
          <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
    </td>
    </tr>
    <tr>
        <td></td>
        <td><input type="submit" value="Login" /></td>
    </tr>
</tbody>
</table>
</form> 
</div>
</body>
</html>

0 个答案:

没有答案