SpringSecurity的配置相对来说有些复杂,如果是完整的bean配置,则需要配置大量的bean,所以xml配置时使用了命名空间来简化配置,同样,spring为我们提供了一个抽象类WebSecurityConfigurerAdapter和一个注解@EnableWebMvcSecurity,达到同样减少bean配置的目的,如下:
applicationContext-SpringSecurityConfig.xml
<http security="none" pattern="/static/**" /> <http security="none" pattern="/**/*.jsp" /> <http auto-config='true' access-decision-manager-ref="accessDecisionManager" access-denied-page="/login" use-expressions="true"> <logout logout-url="/logout" invalidate-session="true" logout-success-url="/login" /> <form-login login-page="/login" authentication-failure-url="/login?error=1" login-processing-url="/j_spring_security_check" password-parameter="j_password" username-parameter="j_username" /> <intercept-url pattern="/**/*.do*" access="hasRole('ROLE_USER')" /> <intercept-url pattern="/**/*.htm" access="hasRole('ROLE_ADMIN')" /> <session-management session-fixation-protection="changeSessionId"> <concurrency-control max-sessions="1" expired-url="/access/sameLogin.do" /> </session-management> <remember-me key="webmvc#FD637E6D9C0F1A5A67082AF56CE32485" remember-me-parameter="remember-me" /> </http> <!-- 启用表达式 为了后面的投票器做准备 --> <beans:bean class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler" id="expressionHandler" /> <beans:bean class="org.springframework.security.web.access.expression.WebExpressionVoter" id="expressionVoter"> <beans:property name="expressionHandler" ref="expressionHandler" /> </beans:bean> <!-- Automatically receives AuthenticationEvent messages --> <beans:bean id="loggerListener" class="org.springframework.security.authentication.event.LoggerListener" /> <beans:bean id="authorizationListener" class="org.springframework.security.access.event.LoggerListener" /> <!-- 认证管理器,使用自定义的UserDetailsService,并对密码采用md5加密 --> <authentication-manager> <authentication-provider user-service-ref="userService"> <password-encoder hash="md5" /> </authentication-provider> </authentication-manager> <beans:bean id="userService" class="web.security.CP_UserDetailsService" /> <beans:bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased"> <beans:property name="decisionVoters"> <beans:list> <beans:bean class="org.springframework.security.access.vote.RoleVoter" /> <beans:bean class="org.springframework.security.access.vote.AuthenticatedVoter" /> <beans:ref bean="expressionVoter" /> </beans:list> </beans:property> </beans:bean>
SpringSecurityConfig.java
@Configuration @EnableWebMvcSecurity public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { private static final Logger logger = Logger .getLogger(SpringSecurityConfig.class); @Override public void configure(WebSecurity web) throws Exception { // 设置不拦截规则 web.ignoring().antMatchers("/static/**", "/**/*.jsp"); } @Override protected void configure(HttpSecurity http) throws Exception { // 设置拦截规则 // 自定义accessDecisionManager访问控制器,并开启表达式语言 http.authorizeRequests().accessDecisionManager(accessDecisionManager()) .expressionHandler(webSecurityExpressionHandler()) .antMatchers("/**/*.do*").hasRole("USER") .antMatchers("/**/*.htm").hasRole("ADMIN").and() .exceptionHandling().accessDeniedPage("/login"); // 开启默认登录页面 // http.formLogin(); // 自定义登录页面 http.csrf().disable().formLogin().loginPage("/login") .failureUrl("/login?error=1") .loginProcessingUrl("/j_spring_security_check") .usernameParameter("j_username") .passwordParameter("j_password").permitAll(); // 自定义注销 http.logout().logoutUrl("/logout").logoutSuccessUrl("/login") .invalidateHttpSession(true); // session管理 http.sessionManagement().sessionFixation().changeSessionId() .maximumSessions(1).expiredUrl("/"); // RemeberMe http.rememberMe().key("webmvc#FD637E6D9C0F1A5A67082AF56CE32485"); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { // 自定义UserDetailsService auth.userDetailsService(userDetailsService()).passwordEncoder( new Md5PasswordEncoder()); } @Bean public CP_UserDetailsService userDetailsService() { logger.info("CP_UserDetailsService"); CP_UserDetailsService userDetailsService = new CP_UserDetailsService(); return userDetailsService; } @Bean public LoggerListener loggerListener() { logger.info("org.springframework.security.authentication.event.LoggerListener"); LoggerListener loggerListener = new LoggerListener(); return loggerListener; } @Bean public org.springframework.security.access.event.LoggerListener eventLoggerListener() { logger.info("org.springframework.security.access.event.LoggerListener"); org.springframework.security.access.event.LoggerListener eventLoggerListener = new org.springframework.security.access.event.LoggerListener(); return eventLoggerListener; } /* * * 这里可以增加自定义的投票器 */ @SuppressWarnings("rawtypes") @Bean(name = "accessDecisionManager") public AccessDecisionManager accessDecisionManager() { logger.info("AccessDecisionManager"); List<AccessDecisionVoter> decisionVoters = new ArrayList<AccessDecisionVoter>(); decisionVoters.add(new RoleVoter()); decisionVoters.add(new AuthenticatedVoter()); decisionVoters.add(webExpressionVoter());// 启用表达式投票器 AffirmativeBased accessDecisionManager = new AffirmativeBased( decisionVoters); return accessDecisionManager; } /* * 表达式控制器 */ @Bean(name = "expressionHandler") public DefaultWebSecurityExpressionHandler webSecurityExpressionHandler() { logger.info("DefaultWebSecurityExpressionHandler"); DefaultWebSecurityExpressionHandler webSecurityExpressionHandler = new DefaultWebSecurityExpressionHandler(); return webSecurityExpressionHandler; } /* * 表达式投票器 */ @Bean(name = "expressionVoter") public WebExpressionVoter webExpressionVoter() { logger.info("WebExpressionVoter"); WebExpressionVoter webExpressionVoter = new WebExpressionVoter(); webExpressionVoter.setExpressionHandler(webSecurityExpressionHandler()); return webExpressionVoter; } }
相关推荐
- 配置SpringSecurity,设置认证和授权规则,定义用户角色和权限。 - 将这三者集成到一个大的配置类中,使整个应用能够正常运行。 6. **注意事项**: - 确保所有必要的依赖库已添加到项目中。 - 谨慎处理事务...
1. `web.xml` - 应用的部署描述符,配置Spring MVC DispatcherServlet和Spring Security Filter。 2. `spring-context.xml` - Spring配置文件,包含bean的定义,如DataSource、SessionFactory、Service和DAO等。 3. ...
如果原项目中使用了Redis作为缓存,需要在Spring Boot中配置Redis的相关属性,如连接信息、数据库索引等。 9. **监控与日志**: Spring Boot提供了Actuator组件用于健康检查、性能监控等。配置监控统计拦截的...
接下来,我们需要配置Spring 4。Spring是一个全面的企业级应用开发框架,它支持AOP(面向切面编程)、依赖注入、事务管理等功能。同样在`pom.xml`中,添加Spring的核心库: ```xml <groupId>org.springframework ...
在这个"springmvc+springSecurity+mybatis"的整合项目中,Spring MVC负责处理HTTP请求并调用业务逻辑,Spring Security确保了用户访问的安全性,而MyBatis则作为数据访问层,处理与数据库的交互。这种组合为开发者...
8. **配置文件**:包括Spring的bean配置文件(如applicationContext.xml)和MyBatis的配置文件(如mybatis-config.xml),定义了组件间的依赖关系和数据库连接信息。 9. **注解驱动**:SpringMVC和MyBatis都支持...
基于java config,使用基于内存的AuthenticationProvider,详细参考:http://blog.csdn.net/xiejx618/article/details/42523337
在这个小 demo 中,你可能会看到 `spring-security.xml` 或者一个名为 `SecurityConfig` 的 Java 类,用于定义安全规则。配置可能包含以下部分: - **UserDetailsService**: 实现该接口,提供用户信息查询服务,...
在这个 "springMVC+springsecurity_Demo" 中,我们很可能会看到以下几个关键部分: 1. **配置文件**:通常会有 `spring-servlet.xml`,用于配置 Spring MVC,包括定义 DispatcherServlet、Controllers、...
采用注解配置SpringMVC,有SpringSecurity,Dao,Controller,Servlet等的样例,部分代码: public void onStartup(ServletContext servletContext) throws ServletException { //日志文件配置 servletContext....
这个案例中的"springsecurity"文件可能包含示例代码、配置文件、或者是一些帮助文档,这些资源将有助于理解上述整合过程。通过实际操作,开发者可以更深入地理解Spring Security和Spring MVC的集成,并能灵活地应用...
public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/static/private/...
- `spring-security-config`: 包含Spring Security的配置API。 - `spring-security-web`: 提供HTTP安全相关功能,如CSRF防护、表单登录等。 - `spring-security-oauth2`: 实现OAuth2协议的Spring模块。 - `spring-...
项目的主要配置文件可能包括`web.xml`(Web应用部署描述符)、`spring-servlet.xml`(Spring MVC配置)、`cxf-servlet.xml`(CXF配置)、`spring-security.xml`(Spring Security配置)、`mybatis-config.xml`...
4. **配置MyBatis**:创建`mybatis-config.xml`,并在Spring配置文件中配置SqlSessionFactory和Mapper扫描。 5. **配置Log4j**:创建`log4j.properties`或`log4j.xml`,根据需求定制日志输出。 6. **编写业务逻辑**...
2. **Spring-MVC配置文件**:如上述配置所示,`/WEB-INF/spring-mvc-config.xml`是SpringMVC的核心配置文件。这里需要定义Bean,包括Controller、ViewResolver、Interceptor等,例如: ```xml <bean class="org....
4. **SpringMVC配置** - 在`spring-servlet.xml`中配置`HandlerMapping`和`HandlerAdapter`,处理HTTP请求。 - 定义视图解析器,如`InternalResourceViewResolver`,指定视图解析的前缀和后缀。 - 可以添加拦截器...
`context-param`用于指定Spring上下文配置文件的位置,通常是一个或多个路径,用逗号分隔,如`classpath*:spring/spring-config.xml`。`ContextLoaderListener`监听器会在Web应用启动时读取这些配置文件,创建Spring...
2. **配置Spring Security**:集成Spring Security通常涉及创建一个配置类,继承自`WebSecurityConfigurerAdapter`。在这个类中,你可以定制安全规则,例如设置登录页面、定义哪些URL需要认证、自定义认证提供者等。...
- 配置Spring:创建Spring的配置文件,如`spring-config.xml`,配置数据源、事务管理器、SqlSessionFactoryBean以及MyBatis的Mapper扫描器。 - 配置MyBatis:在MyBatis的配置文件`mybatis-config.xml`中,设置数据...