2013-12-24 1 views
6

У меня есть там параметры входаКак добавить значения в Spring SecurityContextHolder

1.userName 

2.password 

3.companyId 

Я получил имя пользователя и пароль, используя следующий код

Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 

String name = auth.getName(); 

String pwd = auth.getCredentials(); 

String companyId= ???//How can i set and then get company Id here. 

Мой вопрос, как я могу получить дополнительный параметр входа в систему (companyId) с помощью SecurityContextHolder?

Извлекающий класс может не быть контроллером пружины. Именно поэтому я использую SecurityContextHolder вместо HttpSession.

Thanks,

ответ

9

Создайте простой фильтр SpringSecurityFilter. Используйте метод setDetails, чтобы добавить дополнительные сведения для пользователя.

package org.example; 
public class CustomDeatilsSecurityFilter extends SpringSecurityFilter { 

    protected void doFilterHttp(HttpServletRequest request, HttpServletResponse response, FilterChain chain) { 
     SecurityContext sec = SecurityContextHolder.getContent(); 
     AbstractAuthenticationToken auth = (AbstractAuthenticationToken)sec.getAuthentication(); 
     HashMap<String, Object> info = new HashMap<String, Object>(); 
     info.put("companyId", 42); 
     auth.setDetails(info); 
    } 

} 

Добавьте его в Spring Security Filter Chain, как это (это НЕ web.xml, но что-то вроде ApplicationContext-security.xml):

<bean id="customDeatilsSecurityFilter" class="org.example.CustomDeatilsSecurityFilter"> 
    <custom-filter position="LAST" /> 
</bean> 

потом где-то в коде, вы можете сделать что-то вроде этого:

Map<String, Object> info = (Map<String, Object>)SecurityContextHolder.getContext().getAuthentication.getDetails(); 
int companyId = info.get("companyId"); 

Базовая установка Spring Security в web.xml

<context-param> 
    <param-name>patchConfigLocation</param-name> 
    <param-value> 
     classpath:/applicationContext.xml 
     /WEB-INF/applicationContext-datasource.xml 
     /WEB-INF/applicationContext-security.xml 
    </param-value> 
</context-param> 

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

в ApplicationContext-security.xml

<?xml version="1.0" encoding="UTF-8"?> 

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:sec="http://www.springframework.org/schema/security" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:util="http://www.springframework.org/schema/util" 
    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.2.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.2.xsd 
     http://www.springframework.org/schema/security 
     http://www.springframework.org/schema/security/spring-security-3.1.xsd 
     http://www.springframework.org/schema/util 
     http://www.springframework.org/schema/util/spring-util-3.2.xsd"> 
... 
    <bean id="customDeatilsSecurityFilter" class="org.example.CustomDeatilsSecurityFilter"> 
     <custom-filter position="LAST" /> 
    </bean> 
... 

в pom.xml проекта

<!-- Spring Security --> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
     <version>3.1.3.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
     <version>3.1.3.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-core</artifactId> 
     <version>3.1.3.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-acl</artifactId> 
     <version>3.1.3.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-taglibs</artifactId> 
     <version>3.1.3.RELEASE</version> 
    </dependency> 
    <!-- !Spring Security --> 
+0

Благодаря Антон Shchastnyi .. \t Что такое авторизация? Можете ли вы, пожалуйста, дать мне полный пример?. Я совершенно новый весной. – edaklij

+0

Хорошо, я обновил ответ –

+0

унаследованный класс «SpringSecurityFilter» не существует. ?? Как мы можем указать «custom-filte» внутри обычного компонента? – edaklij

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

  • Нет связанных вопросов^_^