gpt4 book ai didi

java - 只有一个用户可以访问 spring security

转载 作者:行者123 更新时间:2023-11-29 02:57:13 25 4
gpt4 key购买 nike

这是我的问题 - 我正在为授权用户使用 Spring Security,但我只能登录到一个用户(测试)。我正在创建的另一个用户(通过网站或在数据库中手动创建无效)。 db 是 MySQL,spring security 3.2.6.RELEASE。

安全上下文.xml:

<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>

负责登录的 .jsp 代码块:

<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>

Db 已正确连接,因为当我在 db 中为“test”用户手动更改密码时,我需要使用新密码登录。这是用户类,但我认为它不相关:

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;
}

}

编辑:authorities-by-username-query 可能看起来有点乱,但我遇到了 3>2 索引的问题(如果我没记错的话 - 如果你知道正确的查询应该是什么样子 - 不要犹豫指出).

最佳答案

这不是有效的答案,但我认为指向正确的方向 - 我忘记了“已启用”字段。将其添加到数据库并将其映射到用户类后,它仍然无法正常工作(令人惊讶),但问题可能是,我正在使用 hibernate 来处理该项目中的另一个数据库。我打算将我的项目更改为完全使用 hibernate 模式,这应该可以解决问题。

关于java - 只有一个用户可以访问 spring security,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29433658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com