আমি সেশন ছাড়াই কীভাবে স্প্রিং সিকিউরিটি ব্যবহার করতে পারি?


100

আমি স্প্রিং সিকিউরিটি সহ একটি ওয়েব অ্যাপ্লিকেশন তৈরি করছি যা আমাজন ইসি 2 এ লাইভ থাকবে এবং আমাজনের ইলাস্টিক লোড ব্যালান্সার ব্যবহার করবে। দুর্ভাগ্যক্রমে, ELB স্টিকি সেশনগুলি সমর্থন করে না, সুতরাং আমার আবেদনটি সেশন ছাড়াই সঠিকভাবে কাজ করে তা নিশ্চিত করা দরকার।

এখনও অবধি, আমার কাছে কুকির মাধ্যমে একটি টোকন বরাদ্দ করার জন্য রেম্মেম সার্ভিসেস সেটআপ করা হয়েছে এবং এটি ভাল কাজ করে, তবে আমি চাইব কুকিটি ব্রাউজার সেশনের (যেমন ব্রাউজার বন্ধ হয়ে গেলে) সমাপ্ত হবে।

আমার কল্পনা করতে হবে যে আমি প্রথমজন নই যা সেশন ছাড়াই স্প্রিং সিকিউরিটি ব্যবহার করতে চাই ... কোনও পরামর্শ?

উত্তর:


125

জাভা কনফিগারেশনের সাথে স্প্রিং সিকিউরিটি 3 তে আপনি HTTPSecurity.sessionManagement () ব্যবহার করতে পারেন :

@Override
protected void configure(final HttpSecurity http) throws Exception {
    http
        .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}

4
এটি জাভা কনফিগারেশনের সঠিক উত্তর, ম্যাসেজযুক্ত উত্তরের মন্তব্যে @ এস্পেনিন xML কনফিগারেশনের জন্য সঠিকভাবে কী বলেছে তা মিরর করে ing আমরা এই পদ্ধতিটি ব্যবহার করি এবং প্রকৃতপক্ষে আমাদের প্রয়োগটি নিরবচ্ছিন্ন।
পল

এর পার্শ্ব প্রতিক্রিয়া রয়েছে। টমক্যাট ধারক চিত্র, স্টাইলশিট ইত্যাদির জন্য অনুরোধগুলিতে "; জেসিওনিড = ..." যুক্ত করবে কারণ টমক্যাট রাষ্ট্রহীন হতে পছন্দ করে না, এবং স্প্রিং সিকিউরিটি তখন প্রথম লোডে এই সম্পদগুলিকে ব্লক করবে কারণ "ইউআরএলটিতে একটি রয়েছে সম্ভাব্য দূষিত স্ট্রিং ';' "।
কর্মী জোয়ে

@ ওয়ার্কারজো সুতরাং, আপনি এই জাভা কনফিগারেশন দ্বারা কী বলতে চাইছেন, সেশনগুলি বসন্ত সুরক্ষা দ্বারা তৈরি করা হয় না বরং টমক্যাট?
বিশ্বাস আট্রে

@ বিশ্বাস অ্যাট্রে আমার বোঝার (যা ভুল হতে পারে) টমক্যাট সেশনগুলি তৈরি করে এবং বজায় রাখে। বসন্ত তাদের নিজস্ব ডেটা যুক্ত করে তাদের সুবিধা গ্রহণ করে। আমি একটি রাষ্ট্রবিহীন ওয়েব অ্যাপ্লিকেশন করার চেষ্টা করেছি এবং এটি উপরে কাজ করে নি, যেমন আমি উপরে উল্লেখ করেছি। দেখুন আমার নিজের প্রশ্নের উত্তর আরো অনেক কিছুর জন্য।
শ্রমিকজয়

28

স্প্রিং সিকিউরিটি ৩.০ এ এটি আরও সহজ বলে মনে হচ্ছে। আপনি যদি নেমস্পেস কনফিগারেশন ব্যবহার করছেন তবে আপনি কেবল নীচের মতো করতে পারেন:

<http create-session="never">
  <!-- config -->
</http>

অথবা আপনি কি নাল যেমন SecurityContextRepository কনফিগার করতে পারে, এবং কিছুই কখনও যে পথ সংরক্ষিত হবে পাশাপাশি


5
এটি যেমনটি ভেবেছিল তেমনভাবে কাজ করে নি। পরিবর্তে, নীচে একটি মন্তব্য রয়েছে যা "কখনই নয়" এবং "রাষ্ট্রবিহীন" এর মধ্যে পার্থক্য করে। "কখনই না" ব্যবহার করে, আমার অ্যাপ্লিকেশনটি এখনও সেশন তৈরি করছিল। "স্টেটলেস" ব্যবহার করে, আমার অ্যাপ্লিকেশনটি আসলে রাজ্যহীন হয়ে গেছে এবং অন্য উত্তরে উল্লিখিত কোনও ওভাররাইড প্রয়োগ করার দরকার নেই। এখানে JIRA ইস্যুটি দেখুন: jira.springsource.org/browse/SEC-1424
স্যাপেনিন

27

আমরা আজ 4-5 ঘন্টা এই একই ইস্যুতে (কাস্টম সিকিউরিটি কনটেক্সট রিপোসিটিরি টু সিকিউরিটি কনটেক্সট পার্সনিস্টিফিল্টার ইনজেকশন) কাজ করেছি। অবশেষে, আমরা এটি সন্ধান। প্রথমত, স্প্রিং সিকিউরিটি রেফের 8.3 বিভাগে। ডক, একটি সিকিউরিটি কনটেক্সট পার্সারস্টিফিলার শিম সংজ্ঞা রয়েছে

<bean id="securityContextPersistenceFilter" class="org.springframework.security.web.context.SecurityContextPersistenceFilter">
    <property name='securityContextRepository'>
        <bean class='org.springframework.security.web.context.HttpSessionSecurityContextRepository'>
            <property name='allowSessionCreation' value='false' />
        </bean>
    </property>
</bean>

এবং এই সংজ্ঞার পরে, এখানে এই ব্যাখ্যা রয়েছে: "বিকল্পভাবে আপনি সিকিউরিটি কনটেক্সটরিপোসিটরি ইন্টারফেসের একটি নাল প্রয়োগ করতে পারেন, যা অনুরোধের সময় সেশন তৈরি করা হলেও সুরক্ষা প্রসঙ্গটি সংরক্ষণ করা থেকে বিরত রাখবে।"

আমাদের আমাদের কাস্টম সিকিউরিটি কনটেক্সট রেপোসটরিটি সিকিউরিটি কনটেক্সট পার্সনিস্টিফিল্টারে ইনজেকশন করা দরকার। সুতরাং আমরা কেবল আমাদের কাস্টম ইমপ্লের সাহায্যে উপরের শিমের সংজ্ঞাটি পরিবর্তন করেছি এবং এটিকে সুরক্ষা প্রসঙ্গে রেখেছি।

আমরা যখন অ্যাপ্লিকেশনটি চালিত করি, আমরা লগগুলি সন্ধান করেছিলাম এবং দেখেছিলাম সিকিউরিটি কনটেক্সটপর্জিস্টি ফিল্টারটি আমাদের কাস্টম ইমপ্ল ব্যবহার করছে না, এটি এইচটিটিপিএসশনসিকিউরিটিস কনটেক্সটরোপোসিটরি ব্যবহার করছে।

কয়েকটি চেষ্টা করার পরে আমরা আরও জানতে পেরেছিলাম যে আমাদের "কাস্টম-কনটেক্সট-রিপোজিটরি-রেফ" "এইচটিপি" নেমস্পেসের অ্যাট্রিবিউটটি সহ আমাদের কাস্টম সিকিউরিটি কনটেক্সট রিপোজিটরি ইমপ্লাই দিতে হয়েছিল। আপনি যদি "HTTP" নেমস্পেস ব্যবহার করেন এবং নিজের সুরক্ষাকন্টেক্সটপো রিপোজিটরি ইমপ্ল ইনজেকশন করতে চান, তবে "সুরক্ষা-প্রসঙ্গ-রেপোজিটরি-রেফ" বৈশিষ্ট্যটি চেষ্টা করুন।

যখন "HTTP" নেমস্পেস ব্যবহার করা হয়, তখন একটি পৃথক সিকিউরিটি কনটেক্সট পার্সটিস্টিল্ড সংজ্ঞা উপেক্ষা করা হয়। আমি উপরে অনুলিপি হিসাবে, রেফারেন্স ডক। যে বিবরণ দেয় না।

আমি যদি বিষয়গুলিকে ভুল বুঝি তবে দয়া করে আমাকে সংশোধন করুন।


ধন্যবাদ, এটি মূল্যবান তথ্য। আমি আমার আবেদনে চেষ্টা করে দেখব।
জেফ ইভানস

ধন্যবাদ, বসন্ত 3.0 এর সাথে আমার এটির দরকার ছিল
জাস্টিন লুডভিগ

4
আপনি বেশ নির্ভুল যখন আপনি বলেন যে এইচটিএমপি নেমস্পেসটি কাস্টম সিকিউরিটি
কনটেক্সট্পার্সটি ফিল্টারটির

এই পোস্ট করার জন্য আপনাকে অনেক ধন্যবাদ! আমার কী ছোট চুল আছে তা ছিঁড়ে ফেলতে চলেছিলাম। আমি ভাবছিলাম যে সিকিউরিটি কনটেক্সট পার্সনিস্টিফিল্টারের সেটসিকিউরিটি কনটেক্সট রেপোসিটরি পদ্ধতিটি কেন অবহেলা করা হয়েছিল (কনস্ট্রাক্টর ইনজেকশন ব্যবহার করার জন্য ডকস, যা সঠিক নয়))
বুদ্ধিমান 4j13

10

SecurityContextPersistenceFilterক্লাস একবার দেখুন । এটি কীভাবে SecurityContextHolderজনবহুল তা সংজ্ঞায়িত করে । ডিফল্টরূপে এটি HttpSessionSecurityContextRepositoryhttp সেশনে সুরক্ষা প্রসঙ্গ সংরক্ষণ করতে ব্যবহার করে।

আমি কাস্টম সহ এই প্রক্রিয়াটি বেশ সহজেই বাস্তবায়ন করেছি SecurityContextRepository

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

    <context:annotation-config/>

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

    <bean id="securityContextRepository" class="com.project.server.security.TokenSecurityContextRepository"/>

    <bean id="securityContextFilter" class="com.project.server.security.TokenSecurityContextPersistenceFilter">
        <property name="repository" ref="securityContextRepository"/>
    </bean>

    <bean id="logoutFilter" class="org.springframework.security.web.authentication.logout.LogoutFilter">
        <constructor-arg value="/login.jsp"/>
        <constructor-arg>
            <list>
                <bean class="org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler"/>
            </list>
        </constructor-arg>
    </bean>

    <bean id="formLoginFilter"
          class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
        <property name="authenticationManager" ref="authenticationManager"/>
        <property name="authenticationSuccessHandler">
            <bean class="com.project.server.security.TokenAuthenticationSuccessHandler">
                <property name="defaultTargetUrl" value="/index.html"/>
                <property name="passwordExpiredUrl" value="/changePassword.jsp"/>
                <property name="alwaysUseDefaultTargetUrl" value="true"/>
            </bean>
        </property>
        <property name="authenticationFailureHandler">
            <bean class="com.project.server.modules.security.CustomUrlAuthenticationFailureHandler">
                <property name="defaultFailureUrl" value="/login.jsp?failure=1"/>
            </bean>
        </property>
        <property name="filterProcessesUrl" value="/j_spring_security_check"/>
        <property name="allowSessionCreation" value="false"/>
    </bean>

    <bean id="servletApiFilter"
          class="org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter"/>

    <bean id="anonFilter" class="org.springframework.security.web.authentication.AnonymousAuthenticationFilter">
        <property name="key" value="ClientApplication"/>
        <property name="userAttribute" value="anonymousUser,ROLE_ANONYMOUS"/>
    </bean>


    <bean id="exceptionTranslator" class="org.springframework.security.web.access.ExceptionTranslationFilter">
        <property name="authenticationEntryPoint">
            <bean class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
                <property name="loginFormUrl" value="/login.jsp"/>
            </bean>
        </property>
        <property name="accessDeniedHandler">
            <bean class="org.springframework.security.web.access.AccessDeniedHandlerImpl">
                <property name="errorPage" value="/login.jsp?failure=2"/>
            </bean>
        </property>
        <property name="requestCache">
            <bean id="nullRequestCache" class="org.springframework.security.web.savedrequest.NullRequestCache"/>
        </property>
    </bean>

    <alias name="filterChainProxy" alias="springSecurityFilterChain"/>

    <bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy">
        <sec:filter-chain-map path-type="ant">
            <sec:filter-chain pattern="/**"
                              filters="securityContextFilter, logoutFilter, formLoginFilter,
                                        servletApiFilter, anonFilter, exceptionTranslator, filterSecurityInterceptor"/>
        </sec:filter-chain-map>
    </bean>

    <bean id="filterSecurityInterceptor"
          class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
        <property name="securityMetadataSource">
            <sec:filter-security-metadata-source use-expressions="true">
                <sec:intercept-url pattern="/staticresources/**" access="permitAll"/>
                <sec:intercept-url pattern="/index.html*" access="hasRole('USER_ROLE')"/>
                <sec:intercept-url pattern="/rpc/*" access="hasRole('USER_ROLE')"/>
                <sec:intercept-url pattern="/**" access="permitAll"/>
            </sec:filter-security-metadata-source>
        </property>
        <property name="authenticationManager" ref="authenticationManager"/>
        <property name="accessDecisionManager" ref="accessDecisionManager"/>
    </bean>

    <bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">
        <property name="decisionVoters">
            <list>
                <bean class="org.springframework.security.access.vote.RoleVoter"/>
                <bean class="org.springframework.security.web.access.expression.WebExpressionVoter"/>
            </list>
        </property>
    </bean>

    <bean id="authenticationManager" class="org.springframework.security.authentication.ProviderManager">
        <property name="providers">
            <list>
                <bean name="authenticationProvider"
                      class="com.project.server.modules.security.oracle.StoredProcedureBasedAuthenticationProviderImpl">
                    <property name="dataSource" ref="serverDataSource"/>
                    <property name="userDetailsService" ref="userDetailsService"/>
                    <property name="auditLogin" value="true"/>
                    <property name="postAuthenticationChecks" ref="customPostAuthenticationChecks"/>
                </bean>
            </list>
        </property>
    </bean>

    <bean id="customPostAuthenticationChecks" class="com.project.server.modules.security.CustomPostAuthenticationChecks"/>

    <bean name="userDetailsService" class="com.project.server.modules.security.oracle.UserDetailsServiceImpl">
        <property name="dataSource" ref="serverDataSource"/>
    </bean>

</beans>

4
হাই লুকাশ, আপনি কি আপনার সুরক্ষা প্রসঙ্গে সংগ্রহস্থল প্রয়োগের আরও বিশদ দিতে পারেন?
জিম ডাউনিং

4
টোকেনসিকিউরিটি কনটেক্সটরোপোসেটরিতে হ্যাশম্যাপ <স্ট্রিং, সিকিউরিটি কনটেক্সট> প্রসঙ্গম্যাপ রয়েছে contains লোডকন্টেক্সট () পদ্ধতিতে সেশন হ্যাশ কোডের সিকিউরিটি কনটেক্সট উপস্থিত রয়েছে কিনা তা পরীক্ষা করেই অনুরোধপ্যারামিটার সিড, বা কুকি, বা কাস্টম অনুরোধহাইডার বা উপরের যে কোনওটির সংমিশ্রণ দ্বারা পাস করেছে che প্রসঙ্গটি সমাধান না করতে পারলে সিকিউরিটি কনটেক্সটহোল্ডার.createEmptyContext () প্রদান করে। পদ্ধতি সেভকনটেক্সট প্রসঙ্গম্যাপে সমাধান হওয়া প্রসঙ্গ রেখে দেয়।
লুকাস হারম্যান

8

আসলে create-session="never"পুরোপুরি রাষ্ট্রহীন হওয়ার অর্থ এই নয়। স্প্রিং সিকিউরিটি ইস্যু ম্যানেজমেন্টে এর জন্য একটি সমস্যা আছে ।


3

এই উত্তরে পোস্ট করা অসংখ্য সমাধানগুলির সাথে লড়াই করার পরে, <http>নেমস্পেস কনফিগারেশনটি ব্যবহার করার সময় কিছু কাজ করার চেষ্টা করার জন্য , অবশেষে আমি একটি পন্থা পেয়েছি যা আসলে আমার ব্যবহারের ক্ষেত্রে কাজ করে। আমার আসলে এটির প্রয়োজন নেই যে স্প্রিং সিকিউরিটি কোনও অধিবেশন শুরু না করে (কারণ আমি অ্যাপ্লিকেশনটির অন্যান্য অংশে সেশন ব্যবহার করি), এটি কেবলমাত্র সেশনে প্রমাণীকরণের "মনে রাখে না" তা মনে করে না (এটি পুনরায় পরীক্ষা করা উচিত) প্রতিটি অনুরোধ)।

প্রথমত, উপরে বর্ণিত "নাল বাস্তবায়ন" কৌশলটি কীভাবে করা যায় তা আমি বুঝতে সক্ষম হয়েছি was আপনার সুরক্ষা কনটেক্সট রেপোসিটরি সেট করার কথা nullবা কোনও অপ-প্রয়োগ বাস্তবায়নের কথা স্পষ্ট ছিল না । প্রাক্তন কাজ করে না কারণ একটি NullPointerExceptionভিতরে ফেলে দেওয়া হয় SecurityContextPersistenceFilter.doFilter()। অন-অপশন বাস্তবায়ন হিসাবে, আমি কল্পনা করতে পারি এমন সহজ পদ্ধতিতে বাস্তবায়ন করার চেষ্টা করেছি:

public class NullSpringSecurityContextRepository implements SecurityContextRepository {

    @Override
    public SecurityContext loadContext(final HttpRequestResponseHolder requestResponseHolder_) {
        return SecurityContextHolder.createEmptyContext();
    }

    @Override
    public void saveContext(final SecurityContext context_, final HttpServletRequest request_,
            final HttpServletResponse response_) {
    }

    @Override
    public boolean containsContext(final HttpServletRequest request_) {
        return false;
    }

}

এর কারণ হল কিছু অদ্ভুত আমার অ্যাপ্লিকেশনে কাজ করে না, ClassCastExceptionনা থাকার response_প্রকার।

এমনকি ধরে নিয়েছি যে আমি কার্যকরভাবে একটি কার্যকারিতা খুঁজে পেয়েছি যা কার্যকর হয় (সেশনে প্রসঙ্গটি সংরক্ষণ না করে), <http>কনফিগারেশন দ্বারা নির্মিত ফিল্টারগুলিতে কীভাবে এটি ইনজেক্ট করতে হবে তা নিয়ে এখনও সমস্যা রয়েছে। ডকস অনুসারে আপনি কেবলমাত্র SECURITY_CONTEXT_FILTERপজিশনে ফিল্টারটি প্রতিস্থাপন করতে পারবেন না । কভারগুলির নীচে যেটি তৈরি করা হয়েছে তাতে আমি wayুকতে পেলাম একমাত্র উপায় ছিল একটি কুরুচিপূর্ণ বিন writeSecurityContextPersistenceFilterApplicationContextAware

public class SpringSecuritySessionDisabler implements ApplicationContextAware {

    private final Logger logger = LoggerFactory.getLogger(SpringSecuritySessionDisabler.class);

    private ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(final ApplicationContext applicationContext_) throws BeansException {
        applicationContext = applicationContext_;
    }

    public void disableSpringSecuritySessions() {
        final Map<String, FilterChainProxy> filterChainProxies = applicationContext
                .getBeansOfType(FilterChainProxy.class);
        for (final Entry<String, FilterChainProxy> filterChainProxyBeanEntry : filterChainProxies.entrySet()) {
            for (final Entry<String, List<Filter>> filterChainMapEntry : filterChainProxyBeanEntry.getValue()
                    .getFilterChainMap().entrySet()) {
                final List<Filter> filterList = filterChainMapEntry.getValue();
                if (filterList.size() > 0) {
                    for (final Filter filter : filterList) {
                        if (filter instanceof SecurityContextPersistenceFilter) {
                            logger.info(
                                    "Found SecurityContextPersistenceFilter, mapped to URL '{}' in the FilterChainProxy bean named '{}', setting its securityContextRepository to the null implementation to disable caching of authentication",
                                    filterChainMapEntry.getKey(), filterChainProxyBeanEntry.getKey());
                            ((SecurityContextPersistenceFilter) filter).setSecurityContextRepository(
                             new NullSpringSecurityContextRepository());
                        }
                    }
                }

            }
        }
    }
}

যাইহোক, যে সমাধানটি বাস্তবে কাজ করে তা খুব হ্যাকিশ হলেও। কেবলমাত্র Filterএমন একটি ব্যবহার করুন যা সেশন এন্ট্রি মুছে HttpSessionSecurityContextRepositoryদেয় যা তার কাজটি করার সময় দেখায়:

public class SpringSecuritySessionDeletingFilter extends GenericFilterBean implements Filter {

    @Override
    public void doFilter(final ServletRequest request_, final ServletResponse response_, final FilterChain chain_)
            throws IOException, ServletException {
        final HttpServletRequest servletRequest = (HttpServletRequest) request_;
        final HttpSession session = servletRequest.getSession();
        if (session.getAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY) != null) {
            session.removeAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
        }

        chain_.doFilter(request_, response_);
    }
}

তারপরে কনফিগারেশনে:

<bean id="springSecuritySessionDeletingFilter"
    class="SpringSecuritySessionDeletingFilter" />

<sec:http auto-config="false" create-session="never"
    entry-point-ref="authEntryPoint">
    <sec:intercept-url pattern="/**"
        access="IS_AUTHENTICATED_REMEMBERED" />
    <sec:intercept-url pattern="/static/**" filters="none" />
    <sec:custom-filter ref="myLoginFilterChain"
        position="FORM_LOGIN_FILTER" />

    <sec:custom-filter ref="springSecuritySessionDeletingFilter"
        before="SECURITY_CONTEXT_FILTER" />
</sec:http>

নয় বছর পরে, এটি এখনও সঠিক উত্তর। এখন আমরা এক্সএমএলের পরিবর্তে জাভা কনফিগারেশন ব্যবহার করতে পারি। আমি আমার WebSecurityConfigurerAdapterসাথে কাস্টম ফিল্টার যুক্ত করেছি " http.addFilterBefore(new SpringSecuritySessionDeletingFilter(), SecurityContextPersistenceFilter.class)"
কর্মী জোও

3

কেবলমাত্র একটি দ্রষ্টব্য নোট: এটি "ক্রিয়েশন-সেশন" না করে "ক্রিয়েট সেশন"

তৈরি সেশন

এইচটিটিপি সেশন তৈরি হওয়ার আগ্রহের উপরে নিয়ন্ত্রণ করে।

যদি সেট না করা থাকে তবে ডিফল্ট "ifRequired"। অন্যান্য বিকল্পগুলি "সর্বদা" এবং "কখনই নয়"।

এই বৈশিষ্ট্যটির সেটিংটি এইচটিটিপিএসশনকন্টেক্সটইন্টিগ্রেশন ফিল্টারের অনুমতি সেশনক্রিয়েশন এবং ফোর্স ইজারসেশনক্রেশন বৈশিষ্ট্যগুলিকে প্রভাবিত করে। এই বৈশিষ্ট্যটি "কখনই না" সেট করা না থাকলে অনুমতিসেশনস্রেশন সর্বদা সত্য হবে। "সর্বদা" সেট না করা হলে ফোর্সএজারসেশনক্রিয়েশনটি "মিথ্যা"।

সুতরাং ডিফল্ট কনফিগারেশনটি সেশন তৈরি করতে দেয় তবে জোর করে না। ব্যতিক্রম হ'ল সাম্প্রতিক সেশন নিয়ন্ত্রণ সক্ষম করা থাকে, যখন ফোর্সএজারসেশনক্রিয়েশনটি এখানে সেট না করেই সত্য হিসাবে সেট করা থাকে। "কখনই" ব্যবহার করা তারপরে এইচটিটিপিএসশনকন্টেক্সটইন্টিগ্রেশন ফিল্টার শুরু করার সময় ব্যতিক্রম ঘটায়।

সেশন ব্যবহারের সুনির্দিষ্ট বিশদের জন্য, এইচটিটিপিএসশনসিকিউরিটি কনটেক্সটরেপোসিটরি জাভাদোকটিতে কিছু ভাল ডকুমেন্টেশন রয়েছে।


এগুলি সব দুর্দান্ত উত্তর, তবে <http> কনফিগার উপাদানটি ব্যবহার করার সময় কীভাবে এটি অর্জন করা যায় তা নির্ধারণ করার চেষ্টা করে আমি প্রাচীরের বিরুদ্ধে মাথা ঠাপিয়ে যাচ্ছি। এমনকি auto-config=false, আপনি আপাতদৃষ্টিতে SECURITY_CONTEXT_FILTERনিজের নিজের মতো অবস্থানে থাকা প্রতিস্থাপন করতে পারবেন না । আমি কিছু ApplicationContextAwareশিম (এটি securityContextRepositoryএকটি নাল বাস্তবায়নে বাধ্য করার প্রতিচ্ছবি ব্যবহার করে) দিয়ে এটি অক্ষম করার চেষ্টা করার আশেপাশে হ্যাক করছি SessionManagementFilterকিন্তু কোনও ডাইস নেই। এবং দুঃখের বিষয়, আমি স্প্রিং-সুরক্ষা ৩.১ বছরে স্যুইচ করতে পারি না যা প্রদান করবে create-session=stateless
জেফ ইভান্স 15

সর্বদা তথ্যপূর্ণ এই সাইটটি দেখুন। আশা করি এটি আপনাকে এবং অন্যান্য পাশাপাশি " baeldung.com/spring-security-session " - কে সর্বদা সহায়তা করে - ইতিমধ্যে একটি অস্তিত্ব না থাকলে একটি অধিবেশন তৈরি করা হবে • যদি প্রয়োজন হয় - প্রয়োজন হলে একটি সেশন তৈরি করা হবে (ডিফল্ট) • কখনই নয় - কাঠামোটি নিজেই একটি অধিবেশন তৈরি করে না তবে এটি ইতিমধ্যে বিদ্যমান থাকলে তা ব্যবহার করবে
রাজ্যহীন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.