博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring-boot使用spring-security进行身份认证(2)
阅读量:7115 次
发布时间:2019-06-28

本文共 3333 字,大约阅读时间需要 11 分钟。

  紧接着上一篇,上一篇中登录验证都由 security 帮助我们完成了,如果我们想要增加一个验证码登录或者其它的自定义校验就没办法了,因此这一篇讲解如何实现这个功能。

##一、 实现自定义登录校验类

  继承 UsernamePasswordAuthenticationFilter 类来拓展登录校验,代码如下:

public class MyUsernamePasswordAuthentication extends UsernamePasswordAuthenticationFilter{	private Logger log = LoggerFactory.getLogger(this.getClass());	@Override	public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)			throws AuthenticationException {		//我们可以在这里进行额外的验证,如果验证失败抛出继承AuthenticationException的自定义错误。		log.info("在这里进行验证码判断");        //只要最终的验证是账号密码形式就无需修改后续过程		return super.attemptAuthentication(request, response);	}	@Override	public void setAuthenticationManager(AuthenticationManager authenticationManager) {		// TODO Auto-generated method stub		super.setAuthenticationManager(authenticationManager);	}}复制代码

##二、 将自定义登录配置到 security 中   编写自定义登录过滤器后,configure Bean 修改为如下:

@Override	protected void configure(HttpSecurity http) throws Exception {		http		.csrf() //跨站		.disable() //关闭跨站检测        //自定义鉴权过程,无需下面设置		.authorizeRequests()//验证策略			.antMatchers("/public/**").permitAll()//无需验证路径           .antMatchers("/user/**").permitAll()           .antMatchers("/login").permitAll()//放行登录			.antMatchers(HttpMethod.GET, "/user").hasAuthority("getAllUser")//拥有权限才可访问			.antMatchers(HttpMethod.GET, "/user").hasAnyAuthority("1","2")//拥有任一权限即可访问			//角色类似,hasRole(),hasAnyRole()			.anyRequest().authenticated()		.and()        //自定义异常处理		.exceptionHandling()            .authenticationEntryPoint(myAuthenticationEntryPoint)//未登录处理			.accessDeniedHandler(myAccessDeniedHandler)//权限不足处理		.and()        //加入自定义登录校验        .addFilterBefore(myUsernamePasswordAuthentication(),UsernamePasswordAuthenticationFilter.class)        .rememberMe()//默认放在内存中            .rememberMeServices(rememberMeServices())            .key("INTERNAL_SECRET_KEY")//       重写usernamepasswordauthenticationFilter后,下面的formLogin()设置将失效,需要手动设置到个性化过滤器中//        .and()//		.formLogin()//			.loginPage("/public/unlogin") //未登录跳转页面,设置了authenticationentrypoint后无需设置未登录跳转页面//			.loginProcessingUrl("/public/login")//登录api//            .successForwardUrl("/success")//            .failureForwardUrl("/failed")//            .usernameParameter("id")//            .passwordParameter("password")//			.failureHandler(myAuthFailedHandle) //登录失败处理//			.successHandler(myAuthSuccessHandle)//登录成功处理//            .usernameParameter("id")		.and()		.logout()//自定义登出			.logoutUrl("/public/logout")            .logoutSuccessUrl("public/logoutSuccess")			.logoutSuccessHandler(myLogoutSuccessHandle);	}复制代码

然后再编写 Bean,代码如下:

@Beanpublic MyUsernamePasswordAuthentication myUsernamePasswordAuthentication(){    MyUsernamePasswordAuthentication myUsernamePasswordAuthentication = new MyUsernamePasswordAuthentication();    myUsernamePasswordAuthentication.setAuthenticationFailureHandler(myAuthFailedHandle); //设置登录失败处理类    myUsernamePasswordAuthentication.setAuthenticationSuccessHandler(myAuthSuccessHandle);//设置登录成功处理类    myUsernamePasswordAuthentication.setFilterProcessesUrl("/public/login");    myUsernamePasswordAuthentication.setRememberMeServices(rememberMeServices()); //设置记住我    myUsernamePasswordAuthentication.setUsernameParameter("id");    myUsernamePasswordAuthentication.setPasswordParameter("password");    return myUsernamePasswordAuthentication;}复制代码

完成。

本文原创发布于:

转载地址:http://wczel.baihongyu.com/

你可能感兴趣的文章
Map 3D 2013 新功能和新API WebCast视频下载
查看>>
2012年7月感想
查看>>
Memcached的分布式算法-Consistent Hashing
查看>>
Spring-MVC入门(一):入门实例
查看>>
MongoDB 分片
查看>>
一个mount问题解决办法,关于partprobe命令
查看>>
EXECUTE IMMEDIATE
查看>>
mvc area出现“找到多个与名为“Home”的控制器匹配的类型”错误的解决方法
查看>>
左旋转字符串
查看>>
C# 遍历二维数组
查看>>
程序员能力的四个境界(转)
查看>>
一个HTTP请求的详细过程
查看>>
[转]zxing二维码的生成与解码(C#)
查看>>
Android实现宫格图片连续滑动效果
查看>>
ios开发之触摸时间处理
查看>>
Ecshop文章分类列表页如何自定义Title以提高SEO效果
查看>>
List<T>列表通用过滤模块设计
查看>>
Gotchas 44-引用和临时对象
查看>>
Install python 2.6 in CentOS - Stack Overflow
查看>>
sharepoint2013中文版新体验—创建网站应用程序以及网站集(1)
查看>>