Abfrage mit einfachen Anführungszeichen username='?'
Problem verursacht.
Ändern
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception
{
auth.jdbcAuthentication().dataSource(dataSource)
.usersByUsernameQuery("select username, password, true"
+ " from apiclient where username='?'")
.authoritiesByUsernameQuery("select username, role"
+ " from apiclient where username='?'");
}
zu
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication()
.dataSource(dataSource)
.usersByUsernameQuery("select username, password, true"
+ " from apiclient where username=?")
.authoritiesByUsernameQuery("select username, role"
+ " from apiclient where username=?");
}
Nachdem Sie sich Ihren vom Github-Link freigegebenen Code angesehen haben,
Sie haben in Ihrem Projekt keine Protokolle mit dem Level DEBUG aktiviert.
Nach dem Aktivieren von DEBUG-Protokollen ist mir aufgefallen
DEBUG - Executing prepared SQL statement [select username, password, true from apiclient where username='?']
DEBUG - Fetching JDBC Connection from DataSource
...
DEBUG - Caching SQL error codes for DataSource [[email protected]]: database product name is 'H2'
DEBUG - Unable to translate SQLException with Error code '90008', will now try the fallback translator
...
DEBUG - Access is denied (user is anonymous); redirecting to authentication entry point
org.springframework.security.access.AccessDeniedException: Access is denied
at org.springframework.security.access.vote.AffirmativeBased.decide(AffirmativeBased.java:84)
Ihre Abfrage konnte "usersByUsername" nicht abrufen (aufgrund des einfachen Anführungszeichens in der Abfrage) und die "authoritiesByUsername"-Abfrage wurde aufgrund einer Ausnahme nicht ausgelöst, was zu Springsicherheit führte, um den Benutzer als ROLE_ANONYMOUS und damit 401 (nicht autorisiert) zu behandeln.
Wenn Sie Protokolle in der STS/Eclipse-Konsole sehen möchten.
1. Erstellen Sie die logback.xml-Datei unter src/main/resources
2. Kopieren Sie den folgenden Code
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="ALL_ROLLING_FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>..\logs\SMTH_Project.%d{yyyy-MM-dd_HH}.%i.log.zip</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy MM dd HH:mm:ss:SSS} [%-40thread] %-5level{5} - %msg %n</pattern>
</encoder>
</appender>
<appender name="ASYNC"
class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="ALL_ROLLING_FILE" />
<queueSize>1000000</queueSize>
<discardingThreshold>0</discardingThreshold>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%-5level{5} - %msg %n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>