我是Spring安全的新手,我想用数据库验证用户。我已经用jdbc创建了一个登录页面和一个身份验证提供程序,它检查用户是否存在于数据库中。但是我的代码没有这样做的问题是,它允许所有用户登录!我的代码怎么了?谢谢你的帮助。
@Component(value = "userService")
public class UserService implements AuthenticationProvider {
@Inject
@Named(value = "dataSource")
private DataSource dataSource;
ResultSet resultSet = null;
PreparedStatement preparedStatement = null;
Connection connection = null;
name=auth.getName();
pwd=auth.getCredentials().toString();
public Authentication authenticate(Authentication auth)
throws AuthenticationException {
final String select_auth = "select username,password from users where username='"+name+"' and password='"+pwd+"'";
try {
connection = dataSource.getConnection();
preparedStatement = connection.prepareStatement(select_auth);
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
//what to return here ?
}
这是我的安全会议。xml:
<http auto-config="true">
<form-login login-page="/login" username-parameter="j_username"
password-parameter="j_password" default-target-url="/accueil"
authentication-failure-url="/403" />
<logout logout-success-url="/login" />
</http>
<authentication-manager>
<authentication-provider ref="userService">
</authentication-provider>
</authentication-manager>
在代码中,我看不到为查询设置用户名和密码的位置。您尝试获取名称和密码,并检查您的查询是否返回任何结果
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
String select_auth = "select username,password from users where username=? and password=?";
String username = authentication.getName();
String password = (String) authentication.getCredentials();
preparedStatement = connection.prepareStatement(select_auth);
p.setString(1, username);
p.setString(2, password);
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
List<SampleAuthority> authorities = new ArrayList<SampleAuthority>();
SampleAuthority a = new SampleAuthority();
authorities.add(a);
Collection<? extends GrantedAuthority> authorities1 = authorities;
return new UsernamePasswordAuthenticationToken(username, password, authorities1);
}
}
@Override
public boolean supports(Class<?> arg0) {
return true;
}
class SampleAuthority implements GrantedAuthority {
@Override
public String getAuthority() {
return "ROLE_USER";
}
}
在配置中,您可以添加
<intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
<logout logout-url="/logout" />
在我配置了下面的配置之后,它不会连接到Active Directory。我无法使用Active Directory的帐户登录。会有什么问题? 我有一个Ubuntu服务器18.04,带有ApacheGuacamoleV1。0.0. 安装。我想使用LDAP身份验证来验证用户。我已经下载了鳄梨酱-auth-ldap-1.0.0。jar和jldap-4.3。jar扩展。 10.10.10.21,10.10
我有一个react应用程序在一个单独的端口(localhost:3000)上运行,我想用它来验证用户,目前我的Spring后端(localhost:8080)有一个代理设置。 我能以某种方式手动验证而不是通过发送一个请求到我的后端,并获得一个会话cookie,然后在每个请求中包含cookie吗?这也将简化iOS方面的验证过程(使用此过程,我只能将会话cookie值存储在keychain中,并在每次
问题: 我们有一个spring的基于MVC的RESTful API,它包含敏感信息。API应该是安全的,但是不希望在每个请求中发送用户的凭据(User/Pass组合)。根据REST指南(和内部业务需求),服务器必须保持无状态。API将由另一台服务器以混搭方式使用。 要求: > 客户端请求使用凭据(不受保护的URL);服务器返回一个安全令牌,该令牌包含足够的信息,供服务器验证未来的请求并保持无状态。
目前用户名总是匿名的。设置调用方主体的正确方法是什么?我在拦截器里做这个吗?还是在豆子本身?我的目标是基本上能够调用一个方法loginUserWithEJBOnJboss(String user,String pass),该方法使用在jboss中配置的登录方法并正确设置主体。 我在这里不知所措,谷歌什么也没找到。也许我只是在寻找错误的单词。
我已经创建了一个android应用程序,并使用firebase作为电子邮件注册和认证的手段。注册后,用户可以在数据库中存储库存项目。所以我的问题是,如何设置firebase身份验证规则,以便特定用户只能访问他们输入的数据。现在,每个人都可以读/写数据库。我不担心写的部分,因为电子邮件认证。提前感谢! 我的数据库是这样设置的:数据库
我正在尝试在Spring身份验证服务器(Spring Security)中配置多个身份验证提供程序(主要和次要) 根据“身份验证”方法留档: 返回:包含凭据的完全经过身份验证的对象。如果AuthenticationProvider无法支持对传递的身份验证对象的身份验证,则可能返回null。在这种情况下,将尝试下一个支持提供的身份验证类的AuthenticationProvider。 如果身份验证失