Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

WebSecurityConfigurerAdapter में httpBasic और jdbc प्रमाणीकरण द्वारा उपयोगकर्ता सत्यापन में समस्या

सिंगल कोट के साथ क्वेरी username='?' समस्या पैदा कर रहा है।

संशोधित करें

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

करने के लिए

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

जीथब लिंक से साझा किए गए आपके कोड को देखने के बाद,
आपके प्रोजेक्ट में आपने DEBUG स्तर वाले लॉग सक्षम नहीं किए हैं।

DEBUG लॉग सक्षम करने के बाद मैंने देखा

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)

आपकी क्वेरी usersByUsername (क्वेरी में सिंगल कोट के कारण) प्राप्त करने में विफल हो रही थी और AuthorityByUsername क्वेरी को अपवाद के कारण सक्रिय नहीं किया गया था, जिसके परिणामस्वरूप स्प्रिंग-सिक्योरिटी उपयोगकर्ता को ROLE_ANONYMOUS के रूप में मानती है और इसलिए 401 (अनधिकृत)

अगर आप STS/Eclipse कंसोल में लॉग देखना चाहते हैं।
1. src/main/resources
2 के अंतर्गत logback.xml फ़ाइल बनाएँ। कोड के नीचे कॉपी करें

<?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. यूनिक्स_सॉकेट के साथ MySQL खाते में लॉग इन करें

  2. MySQL में, एक ही डेटाबेस में एक टेबल की सामग्री को दूसरी टेबल पर कैसे कॉपी करें?

  3. बैकअप फ़ाइलों से मैसकल डेटाबेस को कैसे पुनर्प्राप्त करें

  4. तैयार विवरण पर स्विच करना

  5. MySQL CHECK बाधा विकल्प