2013-04-29 1 views
0

스프링 보안 통합에서 내 문제를 찾을 수 없습니다. 나는 벌써 2-3 일을 보냈다. 그래서, 제발 나를 도와주세요. //www.springframework :기존 응용 프로그램에서 스프링 보안을 통합 할 수 없습니다.

아래

<?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>cdl</display-name> 
    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>*.htm</url-pattern> 
    </servlet-mapping> 

    <servlet> 
     <servlet-name>startUpServlet</servlet-name> 
     <servlet-class>com.qait.cdl.commons.startup.StartUpServlet</servlet-class> 
     <load-on-startup>2</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>startUpServlet</servlet-name> 
     <url-pattern>/startUpServlet.htm</url-pattern> 
    </servlet-mapping> 

    <welcome-file-list> 
     <welcome-file>redirect.jsp</welcome-file> 
    </welcome-file-list> 

    <context-param> 
     <param-name>CDL_ENV</param-name> 
     <param-value>staging</param-value> 
    </context-param> 

    <listener> 
     <listener-class>com.qait.cdl.commons.startup.CdlContextListner</listener-class> 
    </listener> 

    <!-- Session timeout --> 
    <session-config> 
     <session-timeout>600</session-timeout> 
    </session-config> 

    <!-- <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> --> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
    WEB-INF/applicationContext.xml 
    WEB-INF/dispatcher-servlet.xml 
    </param-value> 
    </context-param> 


</web-app> 

아래는 내 applicationContext.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:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context" 
    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"> 

    <import resource="classapth*:spring/SpringSecurityConfig.xml" /> 
<!--  <bean name="springSecurityFilterChain" class="org.springframework.web.filter.OncePerRequestFilter"/> --> 
</beans>  

내 SpringSecurityConfig.xml

을 http 내 web.xml 파일입니다. org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd ">

012 3,516,
<security:http auto-config="true" use-expressions="true"> 
    <security:intercept-url pattern="/displayAdminPage.htm" access="hasRole('ROLE_ADMIN')" /> 

    <security:form-login login-page="/login.htm" authentication-failure-url="/login.htm"/> 
    <security:logout logout-url="/logout.htm" logout-success-url="/login.htm"/> 
    <security:access-denied-handler error-page="/login.htm" /> 
</security:http> 

<security:authentication-manager> 
    <security:authentication-provider user-service-ref="userService" > 
    </security:authentication-provider> 
</security:authentication-manager> 

아래 내가 쿼리 다음 한 내 디스패처-servlet.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:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context" 
    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"> 

    <!-- Message resource --> 
    <bean id="messageSource" 
     class="org.springframework.context.support.ResourceBundleMessageSource"> 
     <property name="basenames"> 
      <list> 
       <value>messages</value> 
       <value>error</value> 
      </list> 
     </property> 
    </bean> 

    <!-- Imports all configuration files --> 
    <import resource="classpath*:spring/*.xml" /> 
    <import resource="classpath*:spring/*/*.xml" /> 

    <!-- Interceptor mapping --> 
    <bean id="handlerMapping" 
     class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"> 
     <!-- <property name="interceptors" ref="cdlInterceptor" /> --> 
     <property name="interceptors" ref="cdlSessionInterceptor"></property> 
    </bean> 

    <!-- Tiles view resolver and configuration --> 
    <bean id="viewResolver" 
     class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
     <property name="viewClass" 
      value="org.springframework.web.servlet.view.tiles2.TilesView" /> 
     <property name="order" value="1" /> 
    </bean> 

    <bean id="tilesConfigurer" 
     class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
     <property name="definitions"> 
      <list> 
       <value>/WEB-INF/tiles-defs.xml</value> 
      </list> 
     </property> 
    </bean> 

    <!-- XmlView Resolver --> 
    <bean class="org.springframework.web.servlet.view.XmlViewResolver"> 
     <property name="location" value="/WEB-INF/spring-Xmlviews.xml" /> 
     <property name="order" value="0" /> 
    </bean> 

    <!-- MultipartResolver for file upload --> 
    <bean id="multipartResolver" 
     class="org.springframework.web.multipart.commons.CommonsMultipartResolver" /> 

    <bean id="rssViewer" class="com.qait.cdl.rssfeed.view.CustomRssViewer" /> 

    <!-- Default view resolver mapping <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix"> <value>/WEB-INF/jsp/</value> </property> <property 
     name="suffix"> <value>.jsp</value> </property> <property name="order" value="1" 
     /> </bean> --> 
</beans> 

입니다.

  1. web.xml에 "filter"태그를 지정해야합니까? 그렇다면 그 이유는 무엇입니까?
  2. 내 응용 프로그램에서는 두 가지 응용 프로그램 컨텍스트 (스프링 보안 용 및 기타 dispatcher-servlet 용)가 있습니다. springSecurityConfig.xml이 dispatcher-servlet.xml에 정의 된 bean 정의에 액세스 할 수 있습니까?
  3. 봄 보안 구성의 흐름은 무엇입니까? 내 지식으로는, 내가 이해했습니다 가로 채기 - URL 태그는 요청을 차단하고 표현 언어를 사용하여 적절한 역할을 확인합니다. 어떻게 적절한 역할을하는지 이해할 수 없습니다. DB를 통해 인증 관리자를 제공했습니다. 아래

는 userService 인터페이스 아래

<bean name="userService" class="com.qait.cdl.services.impl.UserServiceImpl"> 
      <property name="userDao" ref="userDao" /> 
     </bean> 

service.xml 내 userService bean 정의이다

public interface UserService extends UserDetailsService{ 
} 

이 UserDetailsService도는 아래

스프링 프레임 워크

에서입니다 UserServiceimpl 클래스

public class UserServiceImpl implements UserService { 
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException { 
     UserDetails userDetails = null; 
     if(username != null && !"".equals(username)){ 
      User user = userDao.get(username); 
      if(user != null){ 
       UserGroupAuthority groupAuthority = userDao.getUserAuthority(user); 
       if(groupAuthority != null){ 
        Collection<GrantedAuthority> grantedAuthorities = getGrantedAuthorities(groupAuthority.getAuthority()); 
        userDetails = new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), 
          true, true, true, true, grantedAuthorities); 
       } 
      } 
     } 
     return userDetails; 
    } 

    @Override 
    public Collection<GrantedAuthority> getGrantedAuthorities(String authority) { 
     List<GrantedAuthority> grantedAuthorities = new LinkedList<GrantedAuthority>(); 
     grantedAuthorities.add(new GrantedAuthorityImpl("ROLE_USER")); 
     return grantedAuthorities; 
    } 

    @Override 
    public UserGroupAuthority getUserAuthority(User user) { 
     return userDao.getUserAuthority(user); 
    } 
} 

문제는 단순히 주어진 가로 채기 URL의 유효성을 검사하지 않는 것입니다. 내가 실수를 저지르고있는 곳?

+0

왜'springSecurityFilterChain'이'web.xml'에서 비활성화되어 있습니까? –

+0

"springSecurityFilterChain"을주는 것이 필요합니다. 왜냐하면 나는 모든 요청을 가로 챈 것 같아요. 왜냐하면 /*이 들어오는 모든 요청을 차단하기 때문입니다. 그러나 나는 그것을 원하지 않는다. 그래서 나는 그 코드 – ved

답변

0

web.xml에서 springSecurityFilterChain을 활성화하십시오. Spring Security의 시작점입니다. springSecurityFilterChain이 비활성화되면 스프링 보안은 작동하지 않습니다.

+0

을 논평했지만 인터넷에있는 모든 곳의 /* 태그가있는 이유를 설명했습니다.이 태그의 의미는 무엇입니까? – ved

+0

springSecurityFilterChain을 활성화 한 후 작동 중이며 URL도 가로 채고 있지만 hasRole ('ROLE_ADMIN') 메서드를 호출 할 때 문제가 발생합니다. 내가 파일 아래로 내 springsecurityconfig 파일을 업데이트 할 때 <보안 : HTTP 자동 구성 = "true"를 사용 표현식 = "진정한"> \t \t <보안 : 차단 - URL 패턴 = "/ displayAdminPage.htm"\t \t 사용자 이름과 암호 용 spring의 기본 jsp 페이지를 보여줍니다. 원하지 않습니다. 이것은 생각하기에 좋지 않습니다. 사용자가 이미 사용자 이름과 암호를 입력 했으므로 다시 묻는 이유 – ved

+0

/* url-pattern은 각 요청 중에이 필터가 호출됨을 의미합니다. 그러나이 필터 자체로 각 응답을 실제로 준비한다는 의미는 아닙니다. 필터는 실제로 많은 작업을 수행합니다 (예 : 로그인 한 사용자가 실제 URL을 열 수있는 권한이 있는지 확인). 실제 요청은 해당 서블릿/컨트롤러에 의해 준비됩니다. –

관련 문제