基于javaConfig和注解配置Spring Security(2)

;
//        auth.inMemoryAuthentication() //内置用户
//                .withUser("user").password("user").roles("USER");
    }
}

  需要注意的有几点,如果是用xml配置的springmvc环境下,基于javaConfig和注解配置Spring Security同样适用,只需要确保Spring的上下文能够扫描到上述的两个类即可。

  如果在JSP页面下使用Spring的表单标签,该标签默认会自动添加隐藏的CSRF token标签,即防跨站伪请求攻击,如果没有使用Spring的表单标签,则需要手动添加以下标签,尤其是进行logout登出时表单提交,在Form标签内必须保护以下内容。

<input type="hiden"
           
            value="${_csrf.token}"}

  下面是登录页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
    <title>login</title>
</head>
<body>
<sf:form action="check" method="post" commandName="user" >
    用户名:<sf:input path="username"></sf:input>
    password:<sf:password path="password"></sf:password>
    <input type="checkbox">
    <label for="remember_me">Remember me</label>

<input type="submit" value="提交" >

</sf:form>
</body>
</html>

  登出页面

<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
    <title>User Manager</title>
</head>
<body>
 
  <sf:form action="${ctx}/logout" method="post">
<a href="#">注销</a>
</sf:form>
</body>
</html>

  如果我们想要配置自定义认证和授权服务,则需要实现UserDetailsService

public class UserDetailServiceImpl implements UserDetailsService {
    private static Logger logger=Logger.getLogger(UserDetailServiceImpl.class);
    @Autowired
    private IUserService userService;
    @Autowired
    private IRoleService roleService;
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
      logger.info("===========授权============");

User user= null;
        List<Role> role=null;
        try {
            user = userService.findUserByUsername(username);
            role=roleService.listRoleByUserId(user.getId());
            logger.info("用户角色为:"+role);
        } catch (BaseException e) {
            e.printStackTrace();
        }
        List<GrantedAuthority> list= new ArrayList<GrantedAuthority>();
        list.add(new SimpleGrantedAuthority("ROLE_"+role));
        org.springframework.security.core.userdetails.User authUser = new
                    org.springframework.security.core.userdetails.User
                    (user.getUsername(),user.getPassword(),list);

return authUser;
    }
}

  该配置将安全级别细分到角色。重写的方法传来的参数为登录的username,再通过该参数从数据库中获取用户,以及相对应的权限,最终通过 将用户、密码、权限传入并实例化org.springframework.security.core.userdetails.User ,从而授权结束。配置安全路径或者方法中的权限依据上述方法中获取并绑定的权限。至此我们就可以对路径进行安全权限保护了。

Spring Security 学习笔记 

Spring Security3.1高级详细开发指南 PDF

Spring Security 学习之数据库认证 

Spring Security 学习之LDAP认证 

Spring Security 学习之OpenID认证 

Spring Security 学习之X.509认证 

Spring Security 学习之HTTP基本认证和HTTP摘要认证 

Spring Security 学习之HTTP表单验证 

Spring Security异常之You must provide a configuration attribute 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/e9fec97d233556399d4077fea600273c.html