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;
- }
- }
SpringSecurity相关配置【SpringSecurityConfig】的更多相关文章
- zookeeper集群的搭建以及hadoop ha的相关配置
1.环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 master作为active主机,data1作为standby备用机,三台机器均作为数据节点,yarn资源 ...
- Linux网络相关配置
一.修改网卡相关配置 Linux网络参数是在/etc/sysconfig/network-scripts/ifcfg-eth0中设置,其中ifcfg-eth0表示是第一个网卡,如果还有另外一块网卡,则 ...
- ios开发之Info.plist文件相关配置
前言:在iOS开发中有些情况下需要对Info.plist文件进行配置,以下介绍几种相关配置.以后遇到需要配置的再更新... 开发环境:swift3.0.1,Xcode8.1 一,项目中需要使用第三方字 ...
- SharePoint 2013 托管导航及相关配置 <二>
本文的思路是使用JQuery重写SharePoint自带托管导航的样式,其实思路和脚本都非常简单,引用一下JQuery脚本,然后重写导航的样式,把脚本放到母版页中,即可.当然,使用JQuery可以做很 ...
- IO 相关配置参数
INNODB I/O相关配置 记录日志为顺序I/O,刷新日志到数据文件为随机操作.顺序操作性能快于随机IO. innodb_log_file_size innodb_log_files_in_grou ...
- win7下IIS错误:"无法访问请求的页面,因为该页的相关配置数据无效"的解决方法(转)
今天新装win7,然后在IIS下布署了一个网站,布署完成后运行,提示如下错误:HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效 ...
- IDEA 从SVN检出项目相关配置
1.新建好一个工程,然后通过SVN检出项目 2.检出后一般tomcat的环境是配置好的,点击上方Project Structure按钮,弹出窗体,查看Project项,一般没问题,如果要配置就配置Pr ...
- HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。
HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 详细错误信息模块 IIS Web Core 通知 BeginReques ...
- "HTTP 错误 500.19 请求的页面的相关配置数据无效" 解决办法
HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效. 问题"详细错误信息模块 IIS Web Core通知 Begin ...
随机推荐
- C#编程
C#最完整的webservice实例 http://fyinthesky.blog.163.com/blog/static/3555251720110115227337/ C# WinForm 实践开 ...
- IT公司100题-3-求数组的最大子序列的和
问题描述: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 例如输入的数组为1, -2 ...
- 如何在windows上搭建ftp服务器
FTP(File Transfer Protocol)是TCP/IP网络上两台计算机传送文件的协议,使得主机间可以共享文件.目前有很多软件都能实现这一功能,然而windows自带的IIS就可以帮助你搭 ...
- RAD,V模型
介绍: RAD(Rap Application Developmen快速应用开发t)模型是软件开发过程中的一个重要模型,由于模型构图类似字母V,所以又称为软件开发的V模型.它通过开发和测试同时进行的方 ...
- iOS多线程之NSThread使用
iOS中的多线程技术 我们在iOS开发项目过程中,为了解决UI界面操作不被耗时操作阻塞,我们会使用到多线程技术.在iOS开发中,我们主要会用到三种多线程操作技术:NSThread,NSOperatio ...
- 主线程中一定不能放耗时操作,必须要开子线程,比如下载文件,不然会不让你拿到输入流--报错显示android.os.NetworkOnMainThreadException
1.必须要开子线程来操作耗时操作,android.os.NetworkOnMainThreadException new Thread(new Runnable() { @Override publi ...
- acedGetString获取用户输入字符串
acedGetString()[ads_getstring()]int acedGetString(int cronly, const TCHAR *prompt, TCHAR *psz) acedG ...
- java读取大容量excel之二(空格、空值问题)
最近在项目中发现,对于Excel2007(底层根本是xml) ,使用<java读取大容量excel之一>中的方式读取,若待读取的excel2007文件中某一列是空值,(注意,所谓的空值是什 ...
- Bayeux
Bayeux是一种用来在客户端和服务器端传输低延迟的异步消息(主要通过http)的一种协议.它定义的消息通过命名通道进行路由并且能够进行交互传 送:server -> client, clien ...
- BZOJ 2200 道路与航线
好厉害呀这道题,有种豁然开朗的感觉.... 按拓扑顺序跑最短路. 然后注意细节,像WA的代码犯下的错是一笔带过没有丝毫考虑的...然而就是错了. 考试的时候一定要拍啊. #include<ios ...