2013-03-27 3 views
0

Я пытаюсь сделать основной пружины безопасности D/B аутентификации program.I пытался это двумя способами, т.е.Spring безопасности не перехватывают запрос

Метод 1: Использование пользовательских таблиц для аутентификации Spring Security.
Способ 2: Использование таблиц базы данных безопасности Spring для аутентификации пользователей и авторизации.

Расположение файлов:
1. index.jsp -> WebApp/index.jsp
2. welcome.jsp -> WebApp/страницы/welcome.jsp
3. login.jsp -> WebApp/страницы/login.jsp

Для метода 1 безопасность Spring не была перехвата запроса, и я не видел ошибок в консоли. Вместо перехвата запроса я был непосредственно взят на welcome.jsp.

P.S - Поскольку я не пытался авторизацию, я не использовал атрибут «полномочия по имени пользователя» ниже в контексте xml-контекста безопасности. Я не уверен, что это обязательное для создания таблицы для авторизации.

Ниже моя безопасность-context.xml:

<?xml version="1.0" encoding="UTF-8"?> 
    <beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee" 
xmlns:security="http://www.springframework.org/schema/security" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/security 
     http://www.springframework.org/schema/security/spring-security-3.1.xsd 
     http://www.springframework.org/schema/tx 
     http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> 

<security:http auto-config="true"> 
    <security:intercept-url pattern="/welcome.html" /> 
    <security:form-login login-page="/login.html" 
     default-target-url="/welcome.html" authentication-failure-url="/loginfailed.html" /> 
    <security:logout logout-success-url="/logout.html" /> 
</security:http> 

<security:authentication-manager> 
    <security:authentication-provider> 
     <security:jdbc-user-service data-source-ref="dataSource" 
     users-by-username-query="select FIRST_NAME,LAST_NAME,PASSWORD from USER_AUTHENTICATION where FIRST_NAME=?" /> 
    </security:authentication-provider> 
</security:authentication-manager> 

web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web- app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
<display-name>SpringPOC</display-name> 
<servlet> 
<servlet-name>spring</servlet-name> 
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
<load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
<servlet-name>spring</servlet-name> 
<url-pattern>*.html</url-pattern> 
</servlet-mapping> 
<listener> 
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<context-param> 
<param-name>contextConfigLocation</param-name> 
<param-value> 
     /WEB-INF/applicationContextDirect.xml 
     /WEB-INF/applicationContext-security.xml 
    </param-value> 
</context-param> 
<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
<welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 
</web-app> 

BaseController

//@RequestMapping(value="/login", method = RequestMethod.GET) 
@RequestMapping("/login") 
public ModelAndView login(Model model) { 
    //System.out.println("Inside /login..."); 
    return new ModelAndView("login"); 
} 
/*public String login(ModelMap model) { 

    System.out.println("Inside /login..."); 
    return "login"; 

}*/ 

@RequestMapping(value="/loginfailed", method = RequestMethod.GET) 
public String loginerror(ModelMap model) { 

    model.addAttribute("error", "true"); 
    return "login"; 

} 

@RequestMapping(value="/logout", method = RequestMethod.GET) 
public String logout(ModelMap model) { 

    return "login"; 

} 

login.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
      <html> 
     <head> 
     <title>Login Page</title> 
     <style> 
     .errorblock { 
    color: #ff0000; 
    background-color: #ffEEEE; 
    border: 3px solid #ff0000; 
    padding: 8px; 
    margin: 16px; 
    } 
    </style> 
    </head> 
    <body onload='document.f.j_username.focus();'> 
    <h3>Login with Username and Password (Authentication with Database)</h3> 

    <c:if test="${not empty error}"> 
     <div class="errorblock"> 
      Your login attempt was not successful, try again.<br /> Caused : 
      ${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message} 
     </div> 
    </c:if> 

    <form name='f' action="<c:url value='j_spring_security_check' />" 
     method='POST'> 

     <table> 
      <tr> 
       <td>User:</td> 
       <td><input type='text' name='j_username' value=''> 
       </td> 
      </tr> 
      <tr> 
       <td>Password:</td> 
       <td><input type='password' name='j_password' /> 
       </td> 
      </tr> 
      <tr> 
       <td colspan='2'><input name="submit" type="submit" 
        value="submit" /> 
       </td> 
      </tr> 
      <tr> 
       <td colspan='2'><input name="reset" type="reset" /> 
       </td> 
      </tr> 
     </table> 

    </form> 

index.jsp

<body> 
    <div id="content"> 
    <h1>Home Page</h1> 
    <p> 
    Anyone can view this page. 
    </p> 
    <p><a href="welcome.html">Login page</a></p> 
    </div> 
    </body> 

Для метода 2, я создал пружинные конкретные таблицы базы данных во имени «ПОЛЬЗОВАТЕЛЕЙ» и «авторитеты» после того, как, следуя приведенную ниже ссылку. Здесь SQL-запрос не используется в xml, как показано ниже.

http://www.raistudies.com/spring-security-tutorial/authentication-authorization-spring-security-mysql-database/ 

Каждая вещь остается такой же, за исключением security-context.xml.

<?xml version="1.0" encoding="UTF-8"?> 
    <beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns:jee="http://www.springframework.org/schema/jee" 
xmlns:security="http://www.springframework.org/schema/security" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/security 
     http://www.springframework.org/schema/security/spring-security-3.1.xsd 
     http://www.springframework.org/schema/tx 
     http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> 

<security:http realm="Project Realm" auto-config="true"> 
    <security:intercept-url pattern="/welcome.html" access="ROLE_USER"/> 
    <security:form-login login-page="/login.html" 
     default-target-url="/welcome.html" authentication-failure-url="/loginfailed.html" /> 
    <security:logout logout-success-url="/logout.html" /> 
</security:http> 

<security:authentication-manager> 
    <security:authentication-provider> 
    <security:password-encoder hash="md5"/> 
    <security:jdbc-user-service data-source-ref="dataSource"/> 
    </security:authentication-provider> 
</security:authentication-manager> 
    </beans> 

, когда я попытался выше путь, даже если я ввести правильное имя пользователя & пароль, я получаю сообщение «Неверные учетные данные» [Но да, в этом случае весной безопасности перехватывает запрос]. Я использую базу данных Oracle.

[Обновление]: я включил ведение журнала отладки пружины, чтобы найти основную причину ошибок в обоих методах. Я не мог понять или понять, что именно не так из журналов, поэтому я сравнил журналы, которые я получил после попытки обоих методов. Так как для метода 1 Spring безопасности не был перехват запроса, а для метода 2 мне удалось войти в систему (весна безопасности была atleast intercepting request), но я получал сообщение «Плохое удостоверение» даже после ввода правильного имени пользователя &.

Ниже приведен фрагмент кода для метода 2 [Здесь я получаю страницу входа, но проверка подлинности не удается]

  firing Filter: 'FilterSecurityInterceptor' 
     DEBUG: org.springframework.security.web.util.AntPathRequestMatcher - Checking match of request : '/welcome.html'; against 

     '/welcome.html' 
     DEBUG: org.springframework.security.web.access.intercept.FilterSecurityInterceptor - Secure object: FilterInvocation: URL: 

     /welcome.html; Attributes: [ROLE_USER] 
     DEBUG: org.springframework.security.web.access.intercept.FilterSecurityInterceptor - Previously Authenticated: 

     org.sprin[email protected]9055c2bc: Principal: anonymousUser; Credentials: 

     [PROTECTED]; Authenticated: true; Details: org.sprin[email protected]b364: 

     RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: null; Granted Authorities: ROLE_ANONYMOUS 
     DEBUG: org.springframework.security.access.vote.AffirmativeBased - Voter: 

     [email protected], returned: -1 
     DEBUG: org.springframework.security.access.vote.AffirmativeBased - Voter: 

     [email protected]bc, returned: 0 
     DEBUG: org.springframework.security.web.access.ExceptionTranslationFilter - 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:83) 
      at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation 

     (AbstractSecurityInterceptor.java:206) 
      at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke 

     (FilterSecurityInterceptor.java:115) 
      at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter 

     (FilterSecurityInterceptor.java:84) 
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
      at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
      at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
      at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter 

     (AnonymousAuthenticationFilter.java:113) 
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
      at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter 

     (SecurityContextHolderAwareRequestFilter.java:54) 
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
      at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
      at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter 

     (BasicAuthenticationFilter.java:150) 
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
      at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter 

     (AbstractAuthenticationProcessingFilter.java:183) 
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
      at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
      at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter 

     (SecurityContextPersistenceFilter.java:87) 
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
      at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
      at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
      at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
      at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 
      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
      at java.lang.Thread.run(Thread.java:662) 
     DEBUG: org.springframework.security.web.savedrequest.HttpSessionRequestCache - DefaultSavedRequest added to Session: 

     DefaultSavedRequest[http://localhost:8080/itrade-web/welcome.html] 
     DEBUG: org.springframework.security.web.access.ExceptionTranslationFilter - Calling Authentication entry point. 
     DEBUG: org.springframework.security.web.DefaultRedirectStrategy - Redirecting to 'http://localhost:8080/itrade- 

     web/login.html;jsessionid=3FD72892F4F4EF2E65B0C90ABE115354' 
     DEBUG: org.springframework.security.web.context.HttpSessionSecurityContextRepository - SecurityContext is empty or contents 

     are anonymous - context will not be stored in HttpSession. 
     DEBUG: org.springframework.security.web.context.SecurityContextPersistenceFilter - SecurityContextHolder now cleared, as 

     request processing completed 
     DEBUG: org.springframework.security.web.FilterChainProxy - /login.html at position 1 of 10 in additional filter chain; 

     firing Filter: 'SecurityContextPersistenceFilter' 
     DEBUG: org.springframework.security.web.context.HttpSessionSecurityContextRepository - HttpSession returned null object for SPRING_SECURITY_CONTEXT 
     firing Filter: 'UsernamePasswordAuthenticationFilter' 
     ... 
     DEBUG: org.springframework.security.web.FilterChainProxy - /login.html at position 7 of 10 in additional filter chain; 

     firing Filter: 'AnonymousAuthenticationFilter' 
     DEBUG: org.springframework.security.web.authentication.AnonymousAuthenticationFilter - Populated SecurityContextHolder with 

     anonymous token: 'org.sprin[email protected]6fa8940c: Principal: 

     anonymousUser; Credentials: [PROTECTED]; Authenticated: true; Details: 

     org.sprin[email protected]fffde5d4: RemoteIpAddress: 0:0:0:0:0:0:0:1; 

     SessionId: 3FD72892F4F4EF2E65B0C90ABE115354; Granted Authorities: ROLE_ANONYMOUS' 
        ... 
     DEBUG: org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter - Request is to process 

     authentication 
     DEBUG: org.springframework.security.authentication.ProviderManager - Authentication attempt using 

     org.springframework.security.authentication.dao.DaoAuthenticationProvider 
     DEBUG: org.springframework.security.provisioning.JdbcUserDetailsManager - Query returned no results for user 'admin' 
     DEBUG: org.springframework.security.authentication.dao.DaoAuthenticationProvider - User 'admin' not found 
     DEBUG: org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter - Authentication request 

     failed: org.springframework.security.authentication.BadCredentialsException: Bad credentials 
     DEBUG: org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter - Updated SecurityContextHolder 

     to contain null Authentication 
     DEBUG: org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter - Delegating to authentication 

     failure handler org.springframework.se[email protected]1882c1a 
     DEBUG: org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler - Redirecting to 

     /loginfailed.html 
     DEBUG: org.springframework.security.web.DefaultRedirectStrategy - Redirecting to '/itrade-web/loginfailed.html' 
     DEBUG: org.springframework.security.web.context.HttpSessionSecurityContextRepository - SecurityContext is empty or contents 

     are anonymous - context will not be stored in HttpSession. 
     DEBUG: org.springframework.security.web.context.SecurityContextPersistenceFilter - SecurityContextHolder now cleared, as 

     request processing completed 

[Update] Для метода 1, я добавил «власть-по-имени пользователя-запроса» метки после создания пользовательской таблицы для «авторизации». Теперь я получаю экран входа в систему, поэтому я узнал, что для безопасности весны для перехвата мне нужен тег «authority-by-username-query». Но после ввода имени пользователя и пароля я получаю следующее сообщение об ошибке:

Caused : PreparedStatementCallback; uncategorized SQLException for SQL [select   FIRST_NAME,LAST_NAME,PASSWORD from USER_AUTHENTICATION where FIRST_NAME=?]; SQL state [null]; error code [17059]; Fail to convert to internal representation; nested exception is java.sql.SQLException: Fail to convert to internal representation 

я вижу следующие строки в режиме отладки:

  DEBUG: org.springframework.security.authentication.ProviderManager - Authentication attempt using org.springframework.security.authentication.dao.DaoAuthenticationProvider 
     INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml] 
     DEBUG: org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter - Authentication request failed: org.springframework.security.authentication.AuthenticationServiceException: PreparedStatementCallback; uncategorized SQLException for SQL [select FIRST_NAME,LAST_NAME,PASSWORD from USER_AUTHENTICATION where FIRST_NAME=?]; SQL state [null]; error code [17059]; Fail to convert to internal representation; nested exception is java.sql.SQLException: Fail to convert to internal representation 
     DEBUG: org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter - Updated SecurityContextHolder to contain null Authentication 
     DEBUG: org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter - Delegating to authentication failure handler org.springframework.se[email protected]e7736c 
     DEBUG: org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler - Redirecting to /loginfailed.html 
     DEBUG: org.springframework.security.web.DefaultRedirectStrategy - Redirecting to '/itrade-web/loginfailed.html' 

[Update]: Теперь для обоих методов я получаю ту же ошибку, хотя я ввести правильное имя пользователя & password.Also, так как я мог бы получить данные из D/B, я уверен, что я не ошибаюсь из-за данных, отсутствующих в D/B.

DEBUG: org.springframework.security.provisioning.JdbcUserDetailsManager - Query returned no results for user 'user' 

Я чувствую, что за этой ошибкой должна быть какая-либо другая причина.

[Edit] Теперь я следующий 'users_detail' таблицы в D/B:

USER_ID INTEGER

USERNAME VARCHAR2 (50 байт)

ПАРОЛЬ VARCHAR2 (50 байт)

ВКЛЮЧЕНО INTEGER

данных в '' users_detail таблице:

USER_ID USERNAME PASSWORD ВКЛЮЧЕНО

100 пользователя 123456 1

Мой запрос в безопасности-context.xml:

"select username,password, enabled from users_detail where username=?" 

, когда я выполнить запрос вручную т.е. выберите имя пользователя, пароль, включен из users_detail где username = 'user'. Я получаю результаты.

Где я иду не так? Почему класс JdbcUserDetailsManager всегда возвращает «Запрос не возвращает никаких результатов для пользователя пользователя», даже если в D/B есть запись для него.

Режим отладки не показывает, какой метод класса JdbcUserDetailsManager выполняется, когда я получаю вышеуказанную ошибку. Как я могу это знать? Кроме того, делает ли весна внутренне метод шифрования/дешифрования при сохранении поля пароля?

+0

ваш вопрос слишком длинный ... но вот что я предполагаю: для метода 1, intercept-url у вас нет доступа = "authenticated". Без него любой запрос не будет отфильтрован. –

+0

@ HoàngLong - если я добавлю, что я получаю ниже исключения на стартовом сервере. Вызвано: java.lang.IllegalArgumentException: Неподдерживаемые атрибуты конфигурации: [аутентифицировано] ... – coder87

+0

Возможно, вы можете проверить http://stackoverflow.com/questions/2527198/spring-security-notation-for-is-authenticated -fully. В этом вопросе они ссылаются на два других способа защитить URL: с isAuthenticated() и IS_AUTHENTICATED_FULLY. Возможно, один из них сработает для вас. – vincentks

ответ

0

Сообщение журнала «Администратор пользователя« не найден »кажется довольно ясным как причина отказа аутентификации при использовании схемы по умолчанию. Почему бы просто не выполнить команду вручную и не увидеть, возвращает ли она данные пользователя?

Кроме того, отображается ли экран входа в систему, не зависит от того, установлен ли «запрос по запросу пользователя» или нет. Это зависит только от того, применяются ли значения intercept-url для запрашиваемого вами URL-адреса. Единственное исключение - если вы настроили поведение, запрещенное для доступа (для аутентифицированного пользователя с недостаточными правами), чтобы показать страницу входа (не здесь).

Ваше исключение SQL, вероятно, связано с тем, что ваша пользовательская таблица имеет неправильные типы столбцов. Вам нужно найти что-то совместимое с результирующим набором, полученным из стандартной схемы. Лучше придерживаться дефолта, если у вас нет веских оснований.

Лучше все-таки забыть об Oracle полностью, пока вы не сможете получить основы, работающие с простой тестовой базой данных, такой как HSQLDB.

+0

Спасибо за ответ. Для SQL Exception я искал и узнал, что это может быть из-за типов столбцов, поэтому позже изменились типы столбцов на обычные, как там, во всех примерах кодов, то есть с именем пользователя, паролем, включенными столбцами, которые работали. Обязательно ли создавать таблицу с именами «userid», «username», password, enabled? не могу создать таблицу с любыми другими типами столбцов/столбцов. Не знаю, почему весна не конвертирует типы оракула в соответствующие типы jdbc, чтобы избежать этой ошибки. Для «User» admin «не найден». Я очень уверен, что D/B имеет эти данные, поскольку я мог бы получать без каких-либо проблем. – coder87

+0

В классе JdbcUserDetailsManager я вижу метод validateAuthorities, который проверяет полномочия. Поэтому я подумал, что весна также требует от нас доступа, а также после того, как он работал после включения тега «по умолчанию». Я не уверен, но здесь, когда вызывается метод validateAuthorities. Пожалуйста, исправьте меня, если я ошибаюсь. – coder87

+0

Схема по умолчанию определена в [руководстве] (http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html). Вы можете добавить другие, если хотите, но вам нужно будет соответствующим образом настроить запрос. Вы найдете информацию о создании пользовательского UserDetailsService и добавлении дополнительных свойств при поиске. Если ваш запрос возвращает другой тип из ожидаемого набора результатов, он будет терпеть неудачу. Я предполагаю, что это скорее всего связано с Oracle и логическими значениями. –

Смежные вопросы