captcha 확인 필터라는 또 다른 필터를 스프링 보안의 인증 필터와 함께 추가하려고합니다. 이 오류가 발생합니다. 내가 누락 된 것? 빈 초기화가 실패했습니다. 중첩 예외는 org.springframework.beans.ConversionNotSupportedException : 'java.util.LinkedHashMap'유형의 속성 값을 'filterChainMap'속성의 필수 유형 'java.util.Map'으로 변환하는 데 실패했습니다. 중첩 예외가 java.lang.IllegalStateException : [com.asu.edu.base.vo.CaptchaFilterVO] 유형의 값을 'filterChainMap [/ **] [3]'속성의 필수 유형 [javax.servlet.Filter]으로 변환 할 수 없습니다. : 일치 편집자 또는 전환 전략은스프링 보안 3.0에 사용자 정의 필터 추가하기
내 된 .java 파일을 찾을 수 없습니다
public class CaptchaFilterVO {
@Autowired
private ReCaptcha reCaptcha = null;
public void doFilterInternal(HttpServletRequest req, HttpServletResponse res,
FilterChain chain) throws IOException, ServletException {
String recaptcha_response = req.getParameter("recaptcha_response_field");
String recaptcha_challenge = req.getParameter("recaptcha_challenge_field");
String remoteAddress = req.getRemoteAddr();
ReCaptchaResponse reCaptchaResponse = this.reCaptcha.checkAnswer(
remoteAddress, recaptcha_challenge, recaptcha_response);
if (!reCaptchaResponse.isValid()) {
System.out.println("Captcha worong. Please try again.");
}
else
{
System.out.println("Captcha correct. No need to try again.");
}
chain.doFilter(req, res);
}
}
springsecurity.xml
<http auto-config="true">
<!-- intercept-url pattern="/welcome*" access="ROLE_DEPARTMENT_MGR,ROLE_REGULAR_EMP,ROLE_GUEST_USR,ROLE_CORPORATE_MGR" />
<intercept-url pattern="/admin*" access="ROLE_ADMIN" /-->
<intercept-url pattern="/login" filters="none" />
<intercept-url pattern="/resources*" filters="none" />
<intercept-url pattern="/register" filters="none" />
<intercept-url pattern="/logout" filters="none" />
<intercept-url pattern="/loginfailed" filters="none" />
<intercept-url pattern="/admin*" access="ROLE_ADMIN" />
<intercept-url pattern="/Dashboard*" access="ROLE_DEPARTMENT_MGR,ROLE_REGULAR_EMP,ROLE_CORPORATE_MGR" />
<intercept-url pattern="/*" access="IS_AUTHENTICATED_FULLY"/>
<form-login login-page="/login" default-target-url="/"
authentication-failure-url="/loginfailed" />
<logout logout-success-url="/logout" />
<custom-filter ref="captchaVerifierFilter" after="FORM_LOGIN_FILTER"/>
</http>
<beans:bean id="captchaVerifierFilter" class="com.asu.edu.base.vo.CaptchaFilterVO"/>
<beans:bean id="springSecurityFilterChain" class="org.springframework.web.filter.DelegatingFilterProxy"/>
<beans:bean id="myfilterChainProxy" class="org.springframework.security.web.FilterChainProxy">
<filter-chain-map path-type="ant">
<filter-chain pattern="/*" filters="springSecurityFilterChain,captchaVerifierFilter"/>
</filter-chain-map>
</beans:bean>
편집 : 공용 클래스는 CaptchaFilterVO가 OncePerRequestFilter 지금 내가 가진 javax.servlet.Filter 구현 확장 extended OncePerReque stFilter 클래스하지만 이제 충돌이 발생했습니다. 제발 도와주세요. org.springframework.web.util.NestedServletException : 요청 처리에 실패했습니다. 중첩 예외는 org.springframework.beans.BeanInstantiationException : Bean 클래스를 인스턴스화 할 수 없습니다 [org.springframework.http.HttpRequest] : 지정된 클래스는 인터페이스입니다 org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:894) org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:778) javax.servlet.http.HttpServlet.service (HttpServlet.java:621) javax.servlet.http.HttpServlet.service (HttpServlet.java : 722) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:368) org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke (FilterSecurityInterceptor.java:109) 조직. springframework.security.web.access.intercept.FilterSecurityInterce ptor.doFilter (FilterSecurityInterceptor.java:83) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:380)
는'빈 클래스 [org.springframework.http.HttpRequest] 인스턴스화 할 수 없습니다. 인터페이스를 인스턴스화 할 수 없으므로 허용되지 않습니다. 그것을 제거하십시오. –
HttpRequest에 대한 빈을 작성하지 않았습니다. 나는 다음과 같은 클래스 타입의 bean만을 생성하고있다. 위의 코드에서 보듯이 CaptchaFilterVO는 클래스 –
PhantomM
이 예외가 throw 된시기에 대한 자세한 정보를 제공합니다. –