Java 只有一个用户可以访问spring security
这是我的问题——我对授权用户使用Spring安全性,但我只能登录到一个用户(测试)。我正在创建的其他用户(通过网站或在db中手动创建)不工作。db是MySQL,spring security 3.2.6.0版本 security-context.xml:Java 只有一个用户可以访问spring security,java,mysql,spring-mvc,spring-security,Java,Mysql,Spring Mvc,Spring Security,这是我的问题——我对授权用户使用Spring安全性,但我只能登录到一个用户(测试)。我正在创建的其他用户(通过网站或在db中手动创建)不工作。db是MySQL,spring security 3.2.6.0版本 security-context.xml: <beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/sch
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.2.xsd">
<http auto-config="true" use-expressions="true">
<form-login login-page="/"
default-target-url="/"
authentication-failure-url="/error"
username-parameter="username"
password-parameter="password" />
<logout logout-success-url="/" delete-cookies="JSESSIONID" invalidate-session="true" /> <!-- określamy przekierowanie po wylogowaniu -->
<!-- <csrf /> włączamy zabezpieczenie przed csrf -->
<intercept-url pattern="/addnew" access="hasAnyRole('ROLE_USER','ROLE_ADMIN')" />
</http>
<authentication-manager>
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="SELECT login, pass, mail FROM user WHERE login =?"
authorities-by-username-query="SELECT login, role FROM roles WHERE login =?" />
</authentication-provider>
</authentication-manager>
<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
<beans:property name="url" value="jdbc:mysql://localhost:3306/usersdb" />
<beans:property name="username" value="root" />
<beans:property name="password" value="1234" />
</beans:bean>
</beans:beans>
编辑:用户名权限查询可能看起来有点混乱,但我对3>2索引有问题(如果我没记错的话——如果你知道正确的查询应该是什么样子的话——请毫不犹豫地指出)。确保每个用户至少有一个角色。如果用户没有角色,Spring Security将拒绝登录。答案不起作用,但我认为指向正确的方向-我忘记了“启用”字段。在将它添加到db中并在用户类中映射之后,它仍然不起作用(令人惊讶),但问题可能是,我正在使用hibernate在这个项目中处理另一个db。我将使用将我的项目更改为完全休眠,这应该可以解决问题。我确定他们有角色,这里是db.user screen:db.roles:role表的内容是什么?如果日志文件中有错误消息,还可以发布错误消息。我用role表更新了,没有错误。它将我指向/error页面,就像我尝试使用随机用户名和密码登录一样。我重新启动了db和tomcat两次。最后-我不知道使用JDBC有什么问题,但是使用Hibernate连接到用户db,一切都很好。嗨,我和你一样有一个问题。但我用的是Spring Boot,这里是我的问题链接。你能帮助我吗?
<c:set var="sign">
<c:url value="/j_spring_security_check" />
</c:set>
<form class="navbar-form navbar right" action="${sign}" method="POST">
<div class="form-group">
<input type="text" class="form-control" name="username"
placeholder="Username">
</div>
<div class="form-group">
<input type="password" class="form-control" name="password" placeholder="Password">
</div>
<button type="submit" class="btn btn-default" name="action">Sign In</button>
</form>
package com.codedig.app;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity //deklaruje, ze mamy do czynienia z encja
public class User {
//niezalenize czy istnieja gettery/settery (akcesory) wszystkie wlasnosci obiektu sa zapisywane do bd
@Id //deklaruje klucz wg. którego rozrozniamy encje
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "id")
private int id;
@Column(name = "login")
private String login;
@Column(name = "pass")
private String pass;
@Column(name = "mail")
private String mail;
public User() {
super();
}
public User(int id, String login, String pass, String mail) {
super();
this.id = id;
this.login = login;
this.pass = pass;
this.mail = mail;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
}