文档章节

Spring Security使用

y
 yan5845hao
发布于 2017/05/25 15:38
字数 496
阅读 31
收藏 0

重写WebSecurityConfigurerAdapter

package com.uwo.security.roles.configuration;
import com.uwo.security.roles.provider.UwoAuthenticationProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
/**
 * Created by yanhao on 2017/5/24.
 */
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class UwoSecurity extends WebSecurityConfigurerAdapter {
    // 自定义验证
    @Autowired
    private UwoAuthenticationProvider authenticationProvider;
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(authenticationProvider);
    }
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/css/**", "/img/**").permitAll()
                .antMatchers("/login").permitAll()
                .anyRequest().authenticated()
            .and()
                .formLogin()
                    .loginPage("/login")
                    .failureUrl("/login?error")
                    .defaultSuccessUrl("/")
                .permitAll()
            .and()
                .logout().permitAll();
    }
}

HttpSecurity使用

  • http过滤
http.addFilter(实现Filter.class)
http.addFilterBefore(实现Filter.class)  
http.addFilterAfter(实现Filter.class)  
  • ExpressionInterceptUrlRegistry配置 (http.authorizeRequests())
// 配置
http.authorizeRequests()
    .antMatchers("无需授权").permitAll()
    // 剩下的请求都需要授权请求
    .anyRequest().authenticated()
  • FormLoginConfigurer 配置(http.formLogin())
// 配置
http.formLogin()
    .loginProcessingUrl("默认自带的登录页面地址")
    .loginPage("控制器路由登录地址")
    .usernameParameter("用户名参数")
    .passwordParameter("密码参数")
    .defaultSuccessUrl("默认成功地址")
    .failureUrl("失败地址")
    .failureForwardUrl("失败跳转地址")
    .failureHandler(实现AuthenticationFailureHandler.class)
    .successHandler(实现AuthenticationSuccessHandler.class)

AuthenticationManagerBuilder使用

// 设置固定权限
auth.inMemoryAuthentication()
                .withUser("user").password("password").roles("USER");
// 获取用户信息
auth.userDetailsService(实现UserDetailsService.class)
    // 设置加密算法与密码匹配
      .passwordEncoder(实现PasswordEncoder.class)
// 上面的众合体
auth.authenticationProvider(实现AuthenticationProvider.class)

UserDetailsService实现

package com.uwo.security.roles.service;
import com.uwo.security.roles.pojo.Uwo;
import org.apache.log4j.Logger;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
/**
 * Created by yanhao on 2017/5/24.
 */
@Service
public class UwoService implements UserDetailsService {
    private final Logger log = Logger.getLogger(UwoService.class);
    public UserDetails loadUserByUsername(String user) throws UsernameNotFoundException {
        log.warn("username = " + user);
        Uwo uwo = new Uwo();
        uwo.setUsername("uwo");
        uwo.setPassword("123456");
        uwo.setRole("ADMIN");
        return uwo;
    }
}

AuthenticationProvider实现

package com.uwo.security.roles.provider;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.stereotype.Component;
import java.util.Collection;
/**
 * Created by yanhao on 2017/5/25.
 */
@Component
public class UwoAuthenticationProvider implements AuthenticationProvider {
    private final Logger log = Logger.getLogger(UwoAuthenticationProvider.class);
    @Autowired
    private UserDetailsService userDetailsService;
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
        String username = authentication.getName();
        String password = (String) authentication.getCredentials();
        log.warn("username == " + username + "password == " + password);
        /// 用户名验证实施代码
        UserDetails user = userDetailsService.loadUserByUsername(username);
        /// 用户验证实施代码
        /// 密码加密实施代码
        Collection<? extends GrantedAuthority> authorities = user.getAuthorities();
        return new UsernamePasswordAuthenticationToken(user, password, authorities);
    }
    public boolean supports(Class<?> aClass) {
        return true;
    }
}

PasswordEncoder实现

package com.uwo.security.roles.provider;
import org.apache.log4j.Logger;
import org.springframework.security.crypto.password.PasswordEncoder;
/**
 * Created by yanhao on 2017/5/25.
 */
public class UwoPasswordEncoder implements PasswordEncoder {
    private final Logger log = Logger.getLogger(UwoPasswordEncoder.class);
    /**
     * 密码加密
     * @param password
     * @return
     */
    public String encode(CharSequence password) {
        log.warn("password == " + password);
        return password.toString();
    }
    /**
     * 密码验证
     * @param password
     * @param encodedPassword
     * @return
     */
    public boolean matches(CharSequence password, String encodedPassword) {
        log.warn("password == " + password + " -=- encodedPassword == " + encodedPassword);
        return encodedPassword.equals(password.toString());
    }
}

© 著作权归作者所有

共有 人打赏支持
y
粉丝 7
博文 120
码字总数 21437
作品 0
扬州
程序员
Spring Security实现RBAC权限管理

Spring Security实现RBAC权限管理 一简介 在企业应用中,认证和授权是非常重要的一部分内容,业界最出名的两个框架就是大名鼎鼎的 Shiro和Spring Security。由于Spring Boot非常的流行,选择...

小忽悠
06/21
0
0
《Spring Security3》第二章第二部分翻译

三步之内使我们的应用变得安全 尽管Spring Security的配置可能会很难,但是它的作者是相当为我们着想的,因为他们为我们提供了一种简单的机制来使用它很多的功能并可以此作为起点。以这个为起...

小样
2012/03/07
0
0
Spring Security 5.0.8 和 4.2.8 发布,Spring 安全框架

Spring Security 5.0.8 和 4.2.8 已发布,这些版本主要提供 bug 修复和依赖版本更新以及一些小的改进。 Spring Security 5.0.8 changelog Spring Security 4.2.8 changelog Spring Security ...

淡漠悠然
09/11
0
0
Spring boot 前后台分离项目 怎么处理spring security 抛出的异常

最近在开发一个项目 前后台分离的 使用 spring boot + spring security + jwt 实现用户登录权限控制等操作。但是 在用户登录的时候,怎么处理spring security 抛出的异常呢?使用了@RestCont...

道可到非常道
05/07
0
0
01-Spring Security框架学习--入门(二)

一、入门案例 Spring Security 自定义登录界面 通过之前的一节 01-Spring Security框架学习--入门(一)的简单演示,Spring security 使用框架自带的登录界面,下面的案例将使用自己定义的登...

weir_will
08/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

xilinx资源

本系列教学视频由赛灵思高级战略应用工程师带领你:从零开始,一步步深入 掌握 HLS 以及 UltraFAST 设计方法,帮助您成为系统设计和算法加速的大拿! http://www.eetrend.com/topics/2018-0...

whoisliang
3分钟前
0
0
=====BJmeter性能测试小接=====

一、性能测试分类 1、负载测试: 通过逐步加压的方法,达到既定的性能阈值的目标,阈值的设定应是小于某个值,如cpu使用率小于等于80% 2、压力测试: 通过逐步加压的方法,使得系统的某些资源...

覃光林
6分钟前
0
0
企业级开源四层负载均衡解决方案--LVS

网盘链接 企业级开源四层负载均衡解决方案--LVS 本课程将在Linux环境下,学习配置使用LVS,对Web集群和MySQL集群进行负载均衡,并结合利用Keepalived实现负载均衡器的高可用,实现对后端Rea...

qq__2304636824
12分钟前
0
0
Windows上安装Spacemacs

emacs安装 下载地址emacs 安装比较简单,解压后执行\bin\addpm.exe即可 emacs配置 emacs的默认配置文件路径和.emacs.d文件夹都是在Windows主目录下的 C:\Users\Administrator\AppData\Roami...

yxmsw2007
27分钟前
0
0
OSChina 周一乱弹 —— 鱼生不值得

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @瘟神灬念:分享新裤子的单曲《没有理想的人不伤心 (Remix版)》: 《没有理想的人不伤心 (Remix版)》- 新裤子 手机党少年们想听歌,请使劲儿戳...

小小编辑
今天
171
9

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部