Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Masalah dengan validasi pengguna oleh httpBasic dan jdbcAuthentication di WebSecurityConfigurerAdapter

Kueri dengan kutipan tunggal username='?' menyebabkan masalah.

Ubah

 @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='?'");
}

untuk

@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=?");
}

Setelah melihat kode yang dibagikan dari tautan github,
Dalam proyek Anda, Anda belum mengaktifkan log dengan level DEBUG.

Setelah mengaktifkan log DEBUG, saya perhatikan

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)

Kueri Anda gagal mendapatkan usersByUsername (karena kutipan tunggal dalam kueri) dan kueri authorityByUsername tidak diaktifkan karena pengecualian, menghasilkan keamanan pegas untuk memperlakukan pengguna sebagai ROLE_ANONYMOUS dan karenanya 401(Tidak Diotorisasi)

Jika Anda ingin melihat log di konsol STS/Eclipse.
1. buat file logback.xml di bawah src/main/resources
2. Salin kode di bawah ini

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah enkripsi AWS RDS dengan KMS memengaruhi kinerja?

  2. Cara mengurutkan dalam SQL, mengabaikan artikel ('the, a', an etc)

  3. Simpan url gambar dari pencarian Google ke MySQL

  4. MySQL pilih di mana sama dengan beberapa nilai

  5. MYSQL, menggunakan nama tabel unik VS menggunakan id