سؤال

أنا ذاهب ببطء مجنون في محاولة لتكوين SPRING Security 3.0.0 لتأمين تطبيق.

لقد قمت بتكوين الخادم (Jetty) لتطلب مصادقة العميل (باستخدام بطاقة ذكية). ومع ذلك، لا أستطيع أن أحصل على تطبيق ApplicationContext-Security.xml و UserDetailsService حق.

أولا، من ملف سياق التطبيق:

<?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:context="http://www.springframework.org/schema/context"
   xmlns:security="http://www.springframework.org/schema/security"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
            http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">


<security:global-method-security secured-annotations="enabled" />

<security:http auto-config="true">
    <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" requires-channel="https"/>
    <security:x509 subject-principal-regex="CN=(.*?)," user-service-ref="accountService" />
</security:http>

<bean id="accountService" class="com.app.service.AccountServiceImpl"/>

يبدو أن userDetailsService مثل هذا:

public class AccountServiceImpl implements AccountService, UserDetailsService {

private static final Log log = LogFactory.getLog(AccountServiceImpl.class);

private AccountDao accountDao;

@Autowired
public void setAccountDao(AccountDao accountDao) {
    this.accountDao = accountDao;
}

public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException, DataAccessException {

    log.debug("called loadUserByUsername()");
    System.out.println("called loadByUsername()");

    Account result = accountDao.getByEdpi(s);
    return result;

}

}

يحتوي التطبيق على "صفحة أمامية" مع زر تسجيل الدخول، حتى لا يتطلب الوصول إلى ذلك أي نوع من المصادقة.

أي مساعدة موضع تقدير.

هل كانت مفيدة؟

المحلول

يحتوي التطبيق على "صفحة أمامية" مع زر تسجيل الدخول، حتى لا يتطلب الوصول إلى ذلك أي نوع من المصادقة.

هناك خطأ ما هنا. إذا قمت بإعداد حاوية Serverlet الخاصة بك يتطلب مصادقة العميل، لا يمكنك الحصول على مثل هذه الصفحة مفتوحة، في هذه الحالة، لن ينجح مصافحة المصادقة في هذه الحالة للمستخدمين دون الذكي، ولن يرون حتى صفحة خطأ الحاويات - سيكون خطأ في المتصفح بدلا من ذلك.

يمكن القيام به صنع حاوية ل السماح مصادقة العميل وجعل صفحة تسجيل الدخول مفتوحة للمستخدمين المجهولين وتأمين الصفحات الأخرى بواسطة Springsec. لكنني لن أوصي بهذا لتطبيق SmartCard-PKI. تشير مصادقة البطاقة الذكية إلى أهمية أمان وهي أكثر موثوقية للحصول على مستخدمين غير ذكي من غير ذكي يتم إلقاءهم في وقت مبكر على مصافحة الحاويات. في هذه الحالة، لا يزال بإمكانك الحصول على صفحة تسجيل دخول سهلة الاستخدام على منفذ آخر مع زر "تسجيل الدخول" مرتبط بتطبيقك.

إذا كنت بحاجة إلى مساعدة في إعداد SpringSecurity، فيرجى إضافة المزيد من المعلومات حول مشاكل مشاركتك.

نصائح أخرى

من وجهة نظر التكوين، التي تبدو جيدة. ما هو الخطأ الذي تراه؟ هل ترى UserDetetetailsService الخاص بك الحصول على استدعاء مع CN من X.509 سيرت؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top