2013-09-07 3 views
0

Я пытаюсь простую аутентификацию безопасности весны из базы данных. Но когда я пытаюсь войти в систему, я получаю «Нет сеанса для текущего потока» в браузере. в консоли нет ошибок.Весенняя проверка подлинности безопасности из базы данных. Msgstr "В браузере не найдено сеанса для текущего потока".

pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.mycompany</groupId> 
<artifactId>myapp</artifactId> 
<name>DoctorAssist</name> 
<packaging>war</packaging> 
<version>1.0.0-BUILD-SNAPSHOT</version> 
<properties> 
    <java-version>1.6</java-version> 
    <org.springframework-version>3.1.1.RELEASE</org.springframework-version> 
    <org.aspectj-version>1.6.10</org.aspectj-version> 
    <org.slf4j-version>1.6.6</org.slf4j-version> 
</properties> 
<dependencies> 
    <!-- Spring --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>3.1.1.RELEASE</version> 
     <exclusions> 
      <!-- Exclude Commons Logging in favor of SLF4j --> 
      <exclusion> 
       <groupId>commons-logging</groupId> 
       <artifactId>commons-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>3.1.1.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>3.1.1.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
     <version>3.1.1.RELEASE</version> 
    </dependency> 

    <!-- AspectJ --> 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjrt</artifactId> 
     <version>1.5.4</version> 
    </dependency> 

    <!-- Hibernate --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>4.2.5.Final</version> 
    </dependency> 

    <!-- Oracle database Driver --> 
    <dependency> 
     <groupId>com.oracle</groupId> 
     <artifactId>ojdbc6</artifactId> 
     <version>11.2.0.3</version> 
    </dependency> 



    <!-- Logging --> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>${org.slf4j-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>jcl-over-slf4j</artifactId> 
     <version>${org.slf4j-version}</version> 
     <scope>runtime</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>${org.slf4j-version}</version> 
     <scope>runtime</scope> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.15</version> 
     <exclusions> 
      <exclusion> 
       <groupId>javax.mail</groupId> 
       <artifactId>mail</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>javax.jms</groupId> 
       <artifactId>jms</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>com.sun.jdmk</groupId> 
       <artifactId>jmxtools</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>com.sun.jmx</groupId> 
       <artifactId>jmxri</artifactId> 
      </exclusion> 
     </exclusions> 
     <scope>runtime</scope> 
    </dependency> 

    <!-- @Inject --> 
    <dependency> 
     <groupId>javax.inject</groupId> 
     <artifactId>javax.inject</artifactId> 
     <version>1</version> 
    </dependency> 

    <!-- Servlet --> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet.jsp</groupId> 
     <artifactId>jsp-api</artifactId> 
     <version>2.1</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 

    <!-- bootstrap --> 
    <dependency> 
     <groupId>com.efsavage.twitter.bootstrap</groupId> 
     <artifactId>bootstrap-maven</artifactId> 
     <version>2.3.1</version> 
    </dependency> 

    <!-- Test --> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.7</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-core</artifactId> 
     <version>3.1.1.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
     <version>3.1.1.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
     <version>3.1.1.RELEASE</version> 
    </dependency> 

</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-eclipse-plugin</artifactId> 
      <version>2.9</version> 
      <configuration> 
       <additionalProjectnatures> 

    <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature> 
       </additionalProjectnatures> 
       <additionalBuildcommands> 

<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand> 
       </additionalBuildcommands> 
       <downloadSources>true</downloadSources> 
       <downloadJavadocs>true</downloadJavadocs> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.5.1</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
       <compilerArgument>-Xlint:all</compilerArgument> 
       <showWarnings> 
        true 
       </showWarnings> 
       <showDeprecation>true</showDeprecation> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <version>1.2.1</version> 
      <configuration> 
       <mainClass>org.test.int1.Main</mainClass> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
</project> 

servelet-context.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/mvc" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"                 
xmlns:beans="http://www.springframework.org/schema/beans" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/mvc  
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
http://www.springframework.org/schema/beans  

http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
    http://www.springframework.org/schema/context  
http://www.springframework.org/schema/context/spring-context-3.2.xsd"> 

<annotation-driven /> 

    <resources mapping="/resources/**" location="/resources/" /> 

<beans:bean 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <beans:property name="prefix" value="/WEB-INF/views/" /> 
    <beans:property name="suffix" value=".jsp" /> 
</beans:bean> 

<context:component-scan base-package="com.mycompany.myapp" /> 

ApplicationContext-security.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/security" 
xmlns:beans="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.springframework.org/schema/beans   

http://www.springframework.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"> 

<global-method-security pre-post-annotations="enabled"> 

</global-method-security> 

<http use-expressions="true"> 
    <intercept-url pattern="/home/**" access="hasRole('ROLE_SUPERVISOR')"/> 
    <intercept-url pattern="/home/**" access="isAuthenticated()" /> 
    <intercept-url pattern="/**" access="permitAll" /> 
    <form-login /> 
    <logout /> 
    <remember-me /> 


    <session-management invalid-session-url="/loginfailed.jsp"> 
     <concurrency-control max-sessions="1" error-if-maximum-exceeded="true" /> 
    </session-management> 

</http> 

<!-- hibernate DAO for authentication with sessionFactory dependency from dispatcher- 
servlet.xml defined in the web.xml --> 
<beans:bean id="userDAO" class="com.mycompany.daoimpl.UserLoginDAOImpl"> 
    <beans:property name="sessionFactory" ref="sessionFactory"> 
</beans:property> 
</beans:bean> 

<beans:bean id="userService" class="com.mycompany.service.UserLoginService"> 
    <beans:property name="userDAO" ref="userDAO"></beans:property> 
</beans:bean> 

<authentication-manager> 
    <authentication-provider user-service-ref="userService"> 
     <password-encoder hash="sha" /> 
    </authentication-provider>  
</authentication-manager> 

корня context.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" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 

http://www.springframework.org/schema/beans/spring-beans.xsd"> 

<!-- Root Context: defines shared resources visible to all other web components --> 

<bean id="myDataSource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="oracle.jdbc.OracleDriver" /> 
    <property name="url" 
    value="jdbc:oracle:thin:@//localhost:1521/globaldatabse" /> 
    <property name="username" value="docassist" /> 
    <property name="password" value="Thinkpad" /> 
</bean> 


<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 

    <property name="dataSource"> 
     <ref bean="myDataSource" /> 
    </property> 

    <property name="hibernateProperties"> 
     <props> 
      <prop 
    key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> 
      <prop key="hbm2ddl.auto">create</prop> 
      <prop key="hibernate.show_sql">true</prop> 
     </props> 
    </property> 
</bean> 


</beans> 

ДАО класс

public class UserLoginDAOImpl implements UserLoginDAO { 


@Autowired 
private SessionFactory sessionFactory; 

public void setSessionFactory(SessionFactory sessionFactory) { 
    this.sessionFactory = sessionFactory; 
} 

@Override 
@Transactional 
public Users loadUserByName(String name) { 
    if (name != null && !name.equals("")) { 

    @SuppressWarnings("unchecked") 
    List<Users> usr = this.sessionFactory.getCurrentSession() 
        .createQuery("from Users where username=?") 
        .setParameter(0, name) 
        .list(); 

     if (usr.size() == 1) { 
      return usr.get(0); 
     } else { 
      return null; 
     } 
    } else { 
     return null; 
    } 
} 

}

LoginService класс

public class UserLoginService implements UserDetailsService { 


private UserLoginDAO userDao; 

public void setUserDAO(UserLoginDAO u) { 
    userDao = u; 
} 

public UserDetails loadUserByUsername(String username) { 
    if (username != null && !username.equals("")) { 
     Users user = userDao.loadUserByName(username); 
     if (user == null) { 
      return null; 
     } 

     GrantedAuthority grantedAuth = new UserGrantedAuthority(user.getRole()); 
     CustomUser cu = new CustomUser(user.getId(), user.getUsername(), user.getPassword(), 
             new GrantedAuthority[]{ grantedAuth }); 
     return cu; 
    } else { 
     return null; 
    } 
} 

}

UserGrantedAuthority.java

public class UserGrantedAuthority implements GrantedAuthority { 

private static final long serialVersionUID = -3786297951121082647L; 

private String authority = null; 


public UserGrantedAuthority(String auth) { 
    authority = auth; 
} 

@Override 
public String getAuthority() { 
    return authority; 
} 

} 

CustomUser.java

public class CustomUser implements Serializable, UserDetails { 

private static final long serialVersionUID = 1201392234549297485L; 
private long id; 
private String password; 
private String username; 
private GrantedAuthority[] authorities = null; 

public CustomUser(int id, String username, String password, GrantedAuthority[] 
    authorities) { 
    this.id = id; 
    this.password = password; 
    this.username = username; 
    this.authorities = authorities; 
} 

public Collection<GrantedAuthority> getAuthorities() { 
    Collection<GrantedAuthority> auth = new ArrayList<GrantedAuthority>(); 
    for (int i = 0; i < authorities.length; i++) { 
     auth.add(authorities[i]); 
    } 
    return auth; 
} 


public long getId() { 
    return id; 
} 


public void setId(long id) { 
    this.id = id; 
} 

@Override 
public String getPassword() { 
    return this.password; 
} 

@Override 
public String getUsername() { 
    return this.username; 
} 


@Override 
public boolean isAccountNonExpired() { 
    return true; 
} 

@Override 
public boolean isAccountNonLocked() { 
    return true; 
} 

@Override 
public boolean isCredentialsNonExpired() { 
    return true; 
} 

@Override 
public boolean isEnabled() { 
    return true; 
} 
} 

Я очень ценю вашу помощь.

ответ

0

Вам не хватает ключевой части в конфигурации базы данных. У вас нет менеджера транзакций или не настроена спецификация транзакций. Таким образом, никакая сессия не будет (или может) открываться весной.

Возможно, вы захотите прочитать the transaction chapter из справочника Spring. Это объясняет, как настраивать транзакции.

Судя из вашего кода вы должны иметь <tx:annotation-driven /> element рядом с HibernateTransactionManager ..

<tx:annotation-driven /> 
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
    <property name="dataSource" ref="myDataSource" /> 
</bean> 
+0

Спасибо за ваш комментарий. Я дам вам попытку и вернусь к вам. – user2180794

+0

Это не изменило ошибку. Я думаю, что это связано с конфигурацией пружинной безопасности. Я относительно новичок в весне .. искал google широко ... но не смог найти проблему. – user2180794

Смежные вопросы