[英]how to use angularjs login to spring security
I want to use angularjs send username and password for login to spring security instead of normal login.jsp .我想使用 angularjs 发送用户名和密码登录到 spring security 而不是普通的 login.jsp 。 I have some configure like below:
我有一些像下面这样的配置:
-security_config.xml -security_config.xml
<http use-expressions="true" auto-config="true">
<access-denied-handler error-page="/403page" />
<anonymous enabled="false" />
<intercept-url pattern="/api/**" access="hasRole('ROLE_USER')" />
<custom-filter ref="resourceServerFilter" before="PRE_AUTH_FILTER" />
<access-denied-handler ref="oauthAccessDeniedHandler" />
<form-login login-page='/login' username-parameter="username"
password-parameter="password" default-target-url="/api/users"
authentication-failure-url="/login?authfailed" />
<logout logout-success-url="/login?logout" />
</http>
<authentication-manager alias="authenticationManager"
xmlns="http://www.springframework.org/schema/security">
<authentication-provider>
<password-encoder ref="encoder" />
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="select username,password, enabled from users where username=?"
authorities-by-username-query="select username, role from user_roles where username =? " />
</authentication-provider>
</authentication-manager>
<beans:bean id="encoder"
class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder">
<beans:constructor-arg name="strength" value="10" />
</beans:bean>
-LoginController.java -登录控制器.java
@RequestMapping("login")
public ModelAndView getLoginForm(@RequestParam(required = false) String authfailed, String logout,String denied) {
String message = "";
if (authfailed != null) {
message = "Invalid username of password, try again !";
} else if (logout != null) {
message = "Logged Out successfully, login again to continue !";
} else if (denied != null) {
message = "Access denied for this user !";
}
return new ModelAndView("loginForm", "message", message);
}
@RequestMapping("user")
public String geUserPage() {
return "user";
}
-loginForm.jsp -loginForm.jsp
<form method="post" action="<c:url value='j_spring_security_check' />">
<table>
<tr>
<td colspan="2" style="color: red">${message}</td>
</tr>
<tr>
<td>User Name:</td>
<td><input type="text" name="username" />
</td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password" />
</td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="Login" />
</td>
</tr>
</table>
</form>
when i use like this i can login normally,but i don't want to use like loginForm.jsp above.当我这样使用时,我可以正常登录,但我不想使用上面的 loginForm.jsp。 I wanna use restful web service by angularjs send username and password to spring security for login.
我想通过angularjs 使用restful web 服务将用户名和密码发送到spring security 进行登录。 How can i do?
我能怎么做? please help me!
请帮我!
In your example you don't need a controller (LoginController.java) to handle security, Spring Security does it for you.在您的示例中,您不需要控制器 (LoginController.java) 来处理安全性,Spring Security 会为您完成。 Remove this code.
删除此代码。
In AngularJs you need to send a POST request to login.在 AngularJs 中,你需要发送一个 POST 请求来登录。 Like this :
像这样 :
var data = "username="+username+"&password="+password+"&submit=Login";
$http({
method: 'POST',
url: $window.domaineName + 'j_spring_security_check',
data: data,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
}
})
.success(function(data, status){
//login success
})
.error(function(data, status){
// login failure
})
In order to logout, you need to send another Http POST request :为了注销,您需要发送另一个 Http POST 请求:
$http({
method: 'POST',
url: $window.domaineName + 'j_spring_security_logout',
})
.success(function(data, status){
// logout success
})
.error(function(data, status){
// logout failure
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.