`
hanqunfeng
  • 浏览: 1543326 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SpringMVC4零配置--SpringSecurity相关配置【SpringSecurityConfig】

 
阅读更多

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

}

 

SpringMVC4零配置 :代码下载

SpringMVC4零配置--web.xml

SpringMVC4零配置--应用上下文配置【AppConfig】

SpringMVC4零配置--SpringSecurity相关配置【SpringSecurityConfig】

SpringMVC4零配置--Web上下文配置【MvcConfig】

分享到:
评论
3 楼 bing_it 2016-03-14  
2 楼 bewithme 2015-08-25  
Md5PasswordEncoder  被谁吃了吗
1 楼 bewithme 2015-08-20  
楼主你的抠抠号多少,请教一下这个如果权限都配置在数据库里的,如何写这些代码?我的抠抠359709421

相关推荐

    SpringMVC精品资源--使用javaconfig的方式整合SpringMVC+Mybatis+SpringSe.zip

    - 配置SpringSecurity,设置认证和授权规则,定义用户角色和权限。 - 将这三者集成到一个大的配置类中,使整个应用能够正常运行。 6. **注意事项**: - 确保所有必要的依赖库已添加到项目中。 - 谨慎处理事务...

    SpringMVC精品资源--开放源码,基于springMVC+springSecurity3.x+Mybaits3.zip

    1. `web.xml` - 应用的部署描述符,配置Spring MVC DispatcherServlet和Spring Security Filter。 2. `spring-context.xml` - Spring配置文件,包含bean的定义,如DataSource、SessionFactory、Service和DAO等。 3. ...

    springmvc转为springboot--干货.docx

    如果原项目中使用了Redis作为缓存,需要在Spring Boot中配置Redis的相关属性,如连接信息、数据库索引等。 9. **监控与日志**: Spring Boot提供了Actuator组件用于健康检查、性能监控等。配置监控统计拦截的...

    springmvc4+spring4+mybatis3+spring-security3的环境搭建

    接下来,我们需要配置Spring 4。Spring是一个全面的企业级应用开发框架,它支持AOP(面向切面编程)、依赖注入、事务管理等功能。同样在`pom.xml`中,添加Spring的核心库: ```xml &lt;groupId&gt;org.springframework ...

    springmvc+springSecurity+mybatis

    在这个"springmvc+springSecurity+mybatis"的整合项目中,Spring MVC负责处理HTTP请求并调用业务逻辑,Spring Security确保了用户访问的安全性,而MyBatis则作为数据访问层,处理与数据库的交互。这种组合为开发者...

    SpringMVC精品资源--”乡吧“社交项目后台代码(Spring+Springmvc+mybatis).zip

    8. **配置文件**:包括Spring的bean配置文件(如applicationContext.xml)和MyBatis的配置文件(如mybatis-config.xml),定义了组件间的依赖关系和数据库连接信息。 9. **注解驱动**:SpringMVC和MyBatis都支持...

    springMvc+springDataJpa+springSecurity的基本集成配置

    基于java config,使用基于内存的AuthenticationProvider,详细参考:http://blog.csdn.net/xiejx618/article/details/42523337

    SpringSecurity入门小demo(SSM+Spring Security)

    在这个小 demo 中,你可能会看到 `spring-security.xml` 或者一个名为 `SecurityConfig` 的 Java 类,用于定义安全规则。配置可能包含以下部分: - **UserDetailsService**: 实现该接口,提供用户信息查询服务,...

    springMVC+springsecurity_Demo

    在这个 "springMVC+springsecurity_Demo" 中,我们很可能会看到以下几个关键部分: 1. **配置文件**:通常会有 `spring-servlet.xml`,用于配置 Spring MVC,包括定义 DispatcherServlet、Controllers、...

    Spring零配置Demo---JavaConfig

    采用注解配置SpringMVC,有SpringSecurity,Dao,Controller,Servlet等的样例,部分代码: public void onStartup(ServletContext servletContext) throws ServletException { //日志文件配置 servletContext....

    springsecurity,springmvc整合案例

    这个案例中的"springsecurity"文件可能包含示例代码、配置文件、或者是一些帮助文档,这些资源将有助于理解上述整合过程。通过实际操作,开发者可以更深入地理解Spring Security和Spring MVC的集成,并能灵活地应用...

    springmvc-demo03-静态资源访问处理.zip

    public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/static/private/...

    spring security + spring oauth2 +spring mvc SSO单点登录需要的最小jar包集合

    - `spring-security-config`: 包含Spring Security的配置API。 - `spring-security-web`: 提供HTTP安全相关功能,如CSRF防护、表单登录等。 - `spring-security-oauth2`: 实现OAuth2协议的Spring模块。 - `spring-...

    springMVC3+apache CXF+spring security3+mybatis3(proxool)整合maven项目

    项目的主要配置文件可能包括`web.xml`(Web应用部署描述符)、`spring-servlet.xml`(Spring MVC配置)、`cxf-servlet.xml`(CXF配置)、`spring-security.xml`(Spring Security配置)、`mybatis-config.xml`...

    maven+springmvc+mybatis+log4j框架搭建

    4. **配置MyBatis**:创建`mybatis-config.xml`,并在Spring配置文件中配置SqlSessionFactory和Mapper扫描。 5. **配置Log4j**:创建`log4j.properties`或`log4j.xml`,根据需求定制日志输出。 6. **编写业务逻辑**...

    SpringMVC4.x案例和配置

    2. **Spring-MVC配置文件**:如上述配置所示,`/WEB-INF/spring-mvc-config.xml`是SpringMVC的核心配置文件。这里需要定义Bean,包括Controller、ViewResolver、Interceptor等,例如: ```xml &lt;bean class="org....

    spring+springMvc+Mybatis+maven

    4. **SpringMVC配置** - 在`spring-servlet.xml`中配置`HandlerMapping`和`HandlerAdapter`,处理HTTP请求。 - 定义视图解析器,如`InternalResourceViewResolver`,指定视图解析的前缀和后缀。 - 可以添加拦截器...

    详解Spring mvc的web.xml配置说明

    `context-param`用于指定Spring上下文配置文件的位置,通常是一个或多个路径,用逗号分隔,如`classpath*:spring/spring-config.xml`。`ContextLoaderListener`监听器会在Web应用启动时读取这些配置文件,创建Spring...

    springmvc-security

    2. **配置Spring Security**:集成Spring Security通常涉及创建一个配置类,继承自`WebSecurityConfigurerAdapter`。在这个类中,你可以定制安全规则,例如设置登录页面、定义哪些URL需要认证、自定义认证提供者等。...

    SpringMVC 和Mybatis 集成

    - 配置Spring:创建Spring的配置文件,如`spring-config.xml`,配置数据源、事务管理器、SqlSessionFactoryBean以及MyBatis的Mapper扫描器。 - 配置MyBatis:在MyBatis的配置文件`mybatis-config.xml`中,设置数据...

Global site tag (gtag.js) - Google Analytics