Я только начинаю внедрять SpringSecurity, но после входа в систему появляется сообщение об ошибке на экране «Пользователь отключен»
ЭТО ОЧЕНЬ РАБОТАЕТ, ПО УМОЛЧАНИЮ. Когда вы нажимаете кнопку / user или / admin и пытаетесь войти, он показывает «Пользователь отключен»
Я выполняю следующий шаг:
Первый созданная схема. sql (в папке ресурсов)
CREATE TABLE USERS (
USERNAME VARCHAR(128) PRIMARY KEY,
PASSWORD VARCHAR(128) NOT NULL,
ENABLED CHAR(1) CHECK (ENABLED IN ('Y','N') ) NOT NULL
);
CREATE TABLE AUTHORITIES (
USERNAME VARCHAR(128) NOT NULL,
AUTHORITY VARCHAR(128) NOT NULL
);
ALTER TABLE AUTHORITIES ADD CONSTRAINT AUTHORITIES_UNIQUE UNIQUE (USERNAME, AUTHORITY);
ALTER TABLE AUTHORITIES ADD CONSTRAINT AUTHORITIES_FK1 FOREIGN KEY (USERNAME) REFERENCES USERS (USERNAME);
Создано "data. sql" в папке ресурсов
insert into USERS(USERNAME,PASSWORD,ENABLED) VALUES ('user','pass','Y');
insert into USERS(USERNAME,PASSWORD,ENABLED) VALUES ('admin','pass','Y');
insert into AUTHORITIES (USERNAME,AUTHORITY) values ('user','ROLE_USER');
insert into AUTHORITIES (USERNAME,AUTHORITY) values ('admin','ROLE_ADMIN');
HomeResource. JAVA (Это API класса контроллера)
package com.example.callCenter;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeResource{
@GetMapping("/")
public String home(){
return("<h1>Welcome home page..</h1>");
}
@GetMapping("/user")
public String user()
{
return ("<h1>Welcome User page</h1>");
}
@GetMapping("/admin")
public String admin()
{
return("<h1>Welcome Admin page</h1>");
}
}
SecurityConfiguration. java (Это включает PAGE Form Spring)
package com.example.callCenter;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
DataSource dataSource;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource)
.usersByUsernameQuery("select username,password,enabled "
+ "from users "
+ "where username = ?")
.authoritiesByUsernameQuery("select username,AUTHORITY "
+ "from AUTHORITIES "
+ "where username = ?");
// This beloe code is default implementation with MySQL database
// auth.jdbcAuthentication()
// .dataSource(dataSource)
// .withDefaultSchema()
// .withUser(
// User.withUsername("user")
// .password("pass")
// .roles("USER")
// )
// .withUser(
// User.withUsername("admin")
// .password("pass")
// .roles("ADMIN")
// );
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/admin").hasRole("ADMIN")
.antMatchers("/user").hasAnyRole("ADMIN","USER")
.antMatchers("/").permitAll()
.and().formLogin();
}
@Bean
public PasswordEncoder getPasswordEncoder()
{
return NoOpPasswordEncoder.getInstance();
}
}
CallApplication. java
package com.example.callCenter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class CallApplication {
public static void main(String[] args) {
SpringApplication.run(CallCenterApplication.class, args);
}
}
pom. xml: с учетом всех зависимостей, которые не являются проблемой, поскольку форма открывается
application.properties:
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=
spring.datasource.driverClassName=
spring.jpa.show_sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect
spring.jpa.format_sql=true
Я добавил почти все детали, с моей стороны ничего не ожидается, но теперь мне нужна помощь, почему я не могу позвонить пользователю и войти в систему.