这是交易。 我必须仅使用应用程序用户的用户名进行一次身份验证,并且必须使用angular,spring和mysql。 我已经有一个REST POST服务,该服务会接收电子邮件(用户名),并且我必须检查该用户是否存在于数据库的用户表中,并且必须使用以下JSON结构进行响应:

{"response":{"loggedIn":"true"}} or {"response":{"loggedIn":"false"}}

我找到了一个在Spring Security上使用http-basic身份验证的示例,并且工作正常,问题是该方法不适用于我,因为该方法需要用户名和密码,但是仅我需要一个用户名,然后检查该用户是否在数据库中。

我的问题是我该如何使用我的REST服务和仅用户名字段的单一身份验证来进行Spring Security的身份验证?

这是我的spring-context.xml

<security:http pattern="/login" security="none">
</security:http>

<security:http auto-config="true">
    <security:intercept-url pattern="/**" access="ROLE_REST" />
    <security:http-basic />
    <security:logout logout-url="/logout" logout-success-url="/" invalidate-session="true" delete-cookies="true"  />
</security:http>

<security:authentication-manager>
    <security:authentication-provider user-service-ref="watUserDetailService">
        <security:password-encoder hash="md5" />
    </security:authentication-provider>
</security:authentication-manager>

这是我的休息控制器:

@Controller
public class UserController {

@Autowired
ILoginService loginService;

@RequestMapping(value = "/login", method = RequestMethod.POST, produces = "application/json", consumes = "application/json")
public @ResponseBody IResponse login(@RequestBody @Valid LoginForm form, BindingResult result) {
    IResponse loginReponse = null;

    if (result.hasErrors()) {
        ResponseError errorReponse = new ResponseError();
        errorReponse.getError().put("key", KeyConstants.NOT_VALID_EMAIL_ERROR_KEY );
        loginReponse = errorReponse;
    } else {
        Response response = new Response();
        User loggedUser =  null;
        try {
            loggedUser = loginService.login(form.getEmail());
            if (loggedUser != null) {
                response.getResponse().put("loggedIn", Boolean.TRUE.toString());
            }
            loginReponse = response;
        } catch (ServiceException e) {
            response.getResponse().put("loggedIn", Boolean.FALSE.toString());
            loginReponse = response;
        }

    }
    return loginReponse;
}

}

谢谢您的有用帮助,对不起我的英语。

===============>>#1 票数:2

在Spring Security中,您可以添加自定义身份验证器。 您需要一个简单地忽略密码中的内容并返回true的密码。 然后,您传递一个空字符串作为密码,仅此而已。

  ask by Roger Steven Ramírez Espejo translate from so

未解决问题?本站智能推荐: