As thrillers go, this is the polar opposite of (say) Die Hard. There's only one brief scene of violence, as two Russians revealed as spies for the Americans are efficiently dispatched. And we know how it turns out; even if we never heard of Robert Hanssen, the traitorous subject of this movie, a brief scene with (the real) John Ashcroft at the movie's opening announces his arrest.
But, surprisingly, it works pretty well. The movie follows the story of Eric O'Neill (played by Ryan Phillipe), who was assigned as a clerk to Hanssen a month before Hanssen's arrest. At first he thinks he's investigating Hanssen's sexual peccadillos; eventually he's brought into what's really going on: trying to make the case against Hanssen as a traitor.
Chris Cooper plays Hanssen, and Laura Linney plays the FBI agent running O'Neill. Both bring some serious acting fu to their roles; you can't take your eyes off them when they're onscreen.
One problem is that, while the movie details Hanssen's hyper-Catholicism, and revels in the contradiction between the porn-loving deviant espousing ultraconservative social and family values, no connection is made between this and his treason. Apparently, however, this is a mystery in real life too; it would have been phony for the movie to make up an answer.
I want to say just one more thing about Gary Cole, who has a small role here. That guy can just disappear into his role. It would be easy to miss him as the guy who played Reese Bobby in Talladega Nights and Lumbergh in Office Space. They don't give Oscars for that sort of thing, but they should.