文档章节

Spring Security使用

y
 yan5845hao
发布于 2017/05/25 15:38
字数 496
阅读 40
收藏 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());
    }
}

© 著作权归作者所有

共有 人打赏支持
上一篇: Docker 安装mysql
y
粉丝 7
博文 123
码字总数 21918
作品 0
扬州
程序员
私信 提问
Spring Security 官方文档学习路径

Spring 目前有三个层次的项目,Spring Framework层,Spring Boot层和Spring Cloud层。这三个层次的项目里都有Spring Security的东西,在加上安全和权限控制这块是大多数人的一个弱项,导致官...

写bug的攻城狮
10/25
0
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
Java for Web学习笔记(一四二)Spring security准备(3)初窥

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/flowingflying/article/details/82865058 了解Spring Security的基本知识 完全J2EE的web container也能提供完...

恺风
09/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

小白带你认识netty(二)之netty服务端启动(上)

上一章 中的标准netty启动代码中,ServerBootstrap到底是如何启动的呢?这一章我们来瞅下。 server.group(bossGroup, workGroup);server.channel(NioServerSocketChannel.class).optio...

天空小小
32分钟前
1
0
聊聊storm trident batch的分流与聚合

序 本文主要研究一下storm trident batch的分流与聚合 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout) .p......

go4it
昨天
3
0
3分钟总结Mybatis别名

1.系统内置别名: 把类型全小写(resultType/paramType) 2.给某个类起别名 2.1 alias=”自定义” <typeAliases> <typeAlias type="com.bjsxt.pojo.People" alias="peo"/> </typeAli......

KingFightingAn
昨天
2
0
JAVA设计模式之模板方法模式和建造者模式

一、前期回顾 上一篇《Java 设计模式之工厂方法模式与抽象工厂模式》介绍了三种工厂模式,分别是工厂方法模式,简单工厂方法模式,抽象工厂模式,文中详细根据实际场景介绍了三种模式的定义,...

木木匠
昨天
8
0
C中的宏的使用(宏嵌套/宏展开/可变参数宏)

基本原则: 在展开当前宏函数时,如果形参有#或##则不进行宏参数的展开,否则先展开宏参数,再展开当前宏。 #是在定义两边加上双引号 #define _TOSTR(s) #sprintf(_TOSTR(test ABC))pr...

SamXIAO
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部