मुझे 403 त्रुटि प्रबंधन के साथ निम्न समस्या है। यह मेरा विन्यास है:

मेरे वसंत-सुरक्षा का हिस्सा।xml

<sec:http auto-config="true" use-expressions="true" entry-point-ref="ep403" disable-url-rewriting="true">
    <sec:form-login login-page="/login"
                    login-processing-url="/login"
                    username-parameter="email"
                    password-parameter="password"
    />
    <sec:access-denied-handler error-page="/errors/access-denied"/>
    <sec:logout invalidate-session="true" delete-cookies="JSESSIONID,SPRING_SECURITY_REMEMBER_ME_COOKIE"
                logout-success-url="/login"/>
    <sec:session-management session-fixation-protection="newSession"/>
</sec:http>



<bean id="ep403" class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint"/>

यदि लॉग इन/अनधिकृत उपयोगकर्ता यूआरएल देखने के अधिकार के बिना लिंक में प्रवेश करता है - उसे 403 त्रुटि पृष्ठ पर रीडायरेक्ट किया जाएगा और पहले से लॉग इन होने पर सिस्टम से लॉग आउट किया जाएगा। मुझे समाधान की आवश्यकता है जो मुझे लॉग इन उपयोगकर्ता को 403 पेज और लॉगआउट पर रीडायरेक्ट करने की अनुमति देता है, लेकिन इसके लिए अनधिकृत उपयोगकर्ता मैं 403 त्रुटि के बजाय लॉगिन पृष्ठ देखना चाहता हूं, क्या आप जानते हैं कि उस लक्ष्य को प्राप्त करने का कोई मौका है?

मैं अपने स्वयं के प्रमाणीकरण एंटरपॉइंट कार्यान्वयन के साथ प्रयास करता हूं, मैं सुरक्षा संदर्भ से उपयोगकर्ता को जांचना चाहता हूं और यदि यह लॉग इन नहीं है - निषिद्ध पृष्ठ पर रीडायरेक्ट की तुलना में अलग-अलग कार्रवाई निष्पादित करें, लेकिन प्रमाणीकरण इस मामले में हमेशा शून्य है, क्योंकि इस त्रुटि पृष्ठ पर लॉग उपयोगकर्ता दुर्भाग्य से है पहले से ही लॉग आउट

public class AccessDeniedEntryPoint implements AuthenticationEntryPoint {

    public void commence(HttpServletRequest request, HttpServletResponse response,
                         AuthenticationException arg2) throws IOException, ServletException {
        Authenticationauthentication = SecurityContextHolder.getContext().getAuthentication();
        response.sendError(HttpServletResponse.SC_FORBIDDEN, "Access Denied");
    }

}
1
mtmx 3 नवम्बर 2020, 11:06

3 जवाब

सबसे बढ़िया उत्तर

अंत में, मैंने इस सुविधा को वसंत सुरक्षा कस्टम फ़िल्टर में लागू किया

1
mtmx 3 नवम्बर 2020, 16:59

अपनी /त्रुटियों/पहुंच से वंचित मैपिंग पर JSESSIONID,SPRING_SECURITY_REMEMBER_ME_COOKIE कुकीज की जांच करें। यदि वे शून्य हैं, तो इसका मतलब है कि उपयोगकर्ता के पास कुकीज़ रखने के लिए एक सफल लॉगिन नहीं था, इसलिए उसे लॉगिन करने के लिए पुनर्निर्देशित करें, अगर उसे एक्सेस-अस्वीकृत पृष्ठ देखने नहीं दिया।

@RequestMapping(value="/errors/access-denied")
public String error(HttpServletRequest request) {
  Cookie[] cookies = request.getCookies();
  if (cookies != null) {
    for (Cookie cookie : cookies) {
        if (cookie.getName().equals("JSESSIONID") || 
            cookie.getName().equals("SPRING_SECURITY_REMEMBER_ME_COOKIE")) {
            return "access-denied";
        }
    }
  return "login";
 }
1
Opri 3 नवम्बर 2020, 11:30

आपकी सुरक्षा कॉन्फ़िगरेशन फ़ाइल में मुझे लगता है कि आपको उस एप्लिकेशन का यूआरएल जोड़ने की आवश्यकता हो सकती है जिसे प्रमाणीकरण की आवश्यकता नहीं है या उदाहरण के लिए प्रमाणीकरण की आवश्यकता नहीं है।

        @Override
    protected void configure(final HttpSecurity http) throws Exception {
        // @formatter:off
        http
        .csrf().disable()
        .authorizeRequests() 
        .antMatchers("/login*",""
                + "/signin/**",""
                + "/signup/**",""
                + "/api/v1/products/**",""
                + "/api/v1/addproduct/**",""
                + "/api/v1/addCategory/**"
                ).permitAll()
        .anyRequest().authenticated()
//        .and() 
//        .formLogin().loginPage("/login").permitAll()
        .and()
        .logout();
    } // @formatter:on
0
Alaa ebeed 3 नवम्बर 2020, 12:39